2017-04-06 2 views
0

Java 프로그래밍에 익숙하지 않습니다. 클래스 내부에 JButton을 만들고 버튼 인수를 전달하여 기본으로 ActionListener을 생성하고 싶습니다. 하지만 오류가 발생합니다 :클래스의 JButton과 기본 액션 목록입니다.

Cannot make a static reference to the non-static field newBtn 

내 코드는 다음과 같습니다.

import java.awt.event.*; 
import javax.swing.*;  
public class TestBtn { 

TestBtn() { 
} 

public void myBtn(JButton mybtn){ 
    JFrame f=new JFrame("My Example"); 

    mybtn =new JButton("Click Here"); 
    mybtn.setBounds(50,100,95,30); 

    f.add(mybtn); 
    f.setSize(400,400); 
    f.setLayout(null); 
    f.setVisible(true); 
} 
} 

// 내 주요 프로그램 당신은 어떤 객체를 사용하지 않고 변수 newBtn을 사용하는

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 
public class TestBtnMain { 
    JButton newBtn; 

public static void main(String[] args) { 
    TestBtn btn = new TestBtn(); 
    btn.myBtn(newBtn); 

    newBtn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      System.out.println("Success"); 
      } 
     }); 
} 
} 
+0

그냥 그렇게하지 마세요 ... 아주 나쁜 프로그래밍 스타일. 'public class TestBtnMain { JButton newBtn; 'public 클래스 여야합니다. TestBtnMain { static JButton newBtn; ' – XtremeBaumer

+0

* "클래스 안에'JButton'을 만들고 버튼 인수를 전달하여 메인에'ActionListener'를 만들고 싶습니다."* 왜? [XY 문제 란 무엇입니까?] (http://meta.stackexchange.com/q/66377) * "Java 프로그래밍에 익숙하지 않습니다."* 잠시 동안 GUI 프로그래밍을 피해야합니다. 고급 주제입니다. GUI 프로그래밍으로 되돌아 가면,'f.setLayout (null);'이것은 ** 절대 **해야하는 것들 중 하나입니다. Java GUI는 다른 로케일에서 다른 PLAF를 사용하여 다른 OS, 화면 크기, 화면 해상도 등에서 작동해야합니다. 따라서, 그들은 .. –

+0

.. 픽셀 완벽한 레이아웃에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [조합] (http://stackoverflow.com/a/5630271/418556)과 [공백] 레이아웃 채우기 및 테두리 (http://stackoverflow.com/a/17874718/)를 사용하십시오. 418556). –

답변

2

C++과 달리 Java는 참조로 매개 변수를 전송할 가능성이 없습니다. 다음과 같은 그래서 코드를 변경합니다 :

import java.awt.event.*; 
import javax.swing.*;  
public class TestBtn { 

    TestBtn() { 

    } 
    public JButton myBtn(){ 

     JFrame f=new JFrame("My Example"); 

     JButton mybtn =new JButton("Click Here"); 
     mybtn.setBounds(50,100,95,30); 

     f.add(mybtn); 
     f.setSize(400,400); 
     f.setLayout(null); 
     f.setVisible(true); 
     return mybtn; 
    } 

} 

Main 클래스 : 이미 앤드류 톰슨 언급

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 
public class TestBtnMain { 

    public static void main(String[] args) { 
     TestBtn btn = new TestBtn(); 
     JButton newBtn = btn.myBtn(); 

     newBtn.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       System.out.println("Success"); 
      } 
     }); 


    } 
} 

그리고, 당신은 당신의 UI가 다른 플랫폼 작업을 만들기 위해 레이아웃 매니저를 사용해야합니다/화면 해상도

+0

고마워요. 그것은 작동합니다. – Rajesh

0

. 인스턴스 변수이므로 액세스 할 객체가 필요합니다.

이 문장은

btn.myBtn(newBtn); 

newBtn

에 액세스 할 수 클래스 TestBtnMain의 인스턴스를 사용하거나 newBtn 정적 할 수 변경해야합니다.

static JButton newBtn; 
+0

이제 오류가 발생했습니다.그러나 actionlistener가 작동하지 않습니다. – Rajesh

+0

ActionListener를 myBtn 메소드에 추가하십시오. –

0

당신의 TestBtn 클래스는해야한다 :

import java.awt.event.*; 
import javax.swing.*; 

public class TestBtn { 
    private JFrame f; 
    private JButton mybtn; 

TestBtn() { 
     f=new JFrame("My Example"); 
     mybtn =new JButton("Click Here"); 
} 

public void myBtn(){ 

    mybtn.setBounds(50,100,95,30); 
    mybtn.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
      System.out.println("Success"); 
     } 
    }); 

    f.add(mybtn); 
    f.setSize(400,400); 
    f.setLayout(null); 
    f.setVisible(true); 
    } 
} 

그리고 당신은 주요 기능 :

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class TestBtnMain { 

    public static void main(String[] args) { 
     TestBtn btn = new TestBtn(); 
     btn.myBtn(); 
    } 
} 
관련 문제