2017-03-31 2 views
0

지금까지 JFrame에서 발생하는 모든 작업이 JFrame에 머무르는 것으로 보입니다. 의 당신이 있다고 가정 해 봅시다메인 프로그램의 문자열에 JFrame 출력 저장

(아마 대신 스윙의 자바 FX에 입수했습니다한다) JFrame의 클래스 다음과 같이 ActionListener를 구현 중첩 클래스 이름 HandlerClass에 JButton의를 사용 (gui_frame) :

public class gui_frame extends JFrame { 
    private JButton button1; 
    public gui_frame() { 
     super("Title"); 
     setLayout(new FlowLayout()); 

     button1 = new JButton("Hello"); 
     add(button1); 

     HandlerClass handler = new HandlerClass(); 
     button1.addActionListener(handler); 
    } 

    private class HandlerClass implements ActionListener{ 
      public void actionPerformed(ActionEvent e){ 
      //insert code here 
      } 
    } 
} 

그리고 이 gui_frame 클래스를 호출하는 주 코드가 있습니다.

public class main { 
    public static void main(String[] args){ 
     //insert some unrelated code here 

     gui_frame gf = new gui_frame(); 
     gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gf.setSize(400,75); 
     gf.setVisible(true); 

     String button_name; 
     //insert some code that uses button_name   
    } 
} 

기본적으로, 나는 실행하는 동안, 메인 클래스의 문자열 BUTTON_NAME에, 클릭을 한 후, (이 경우 "안녕하세요"에서)이 JFrame의 클래스 gui_frame에있는 버튼의 이름을 저장하기 위해 노력하고있어 시각.

이것이 가능합니까? 이것이 일어나게하려면 gui_frame의 actionPerformed 메소드에 무엇을 삽입해야합니까?

+0

* "지금까지는 JFrame에서 일어나는 모든 일이 JFrame에 남아 있습니다."* 틀렸어! 코드에 따라 다릅니다. 'JFrame'은 라스베가스가 아닙니다. 이러한 코드 차이는'public class gui_frame extends JFrame {'**'JFrame' **을 확장하지 마십시오. ** 메소드의 기능을 변경하지 않는 한. 그냥 프레임의 인스턴스를 사용하십시오. 'button_name' 속성의 범위 내에있는 액션 리스너를 가진 버튼을 그 안에 넣고 수행 된 액션의 속성을 업데이트하십시오. * "(아마도 Swing 대신 JavaFX에 있어야만합니다.) * 아니요, 프로그래밍하는 법을 배우는 것이 더 낫습니다. –

+0

.. Java-FX를 많이 사용하면 문제가 발생합니다. 옆으로, 프레임은 넌 모달이기 때문에,'button_name을 사용하는 코드를 삽입 할 때'button_name'은 여전히 ​​초기화되지 않습니다. 당신은 여기 '마술에 의한 코딩'입니다. 그것은 결코 작동하지 않습니다. –

+0

모달 설명 주셔서 감사합니다. 지금부터는 JDialog를 사용해 보겠습니다. –

답변

1

당신이 할 수있는 몇 가지 방법이있다 (즉, "메인"를 대문자로한다 BTW)

  1. 를 메인 클래스의 람다로 ActionListener를 구현, 그리고에 람다 통과 gui_frame 클래스 (다시 "GuiFrame"이어야 함)이며 GuiFrame 클래스에서 버튼에 리스너를 적용하도록합니다.

  2. GuiFrame 클래스가 버튼을 클릭했다는 사실을 Main 클래스에 알리는 인터페이스를 만듭니다. (및 단추의 이름). Main 클래스에서 해당 인터페이스를 구현 한 다음 Main 인스턴스를 GuiFrame 클래스에 전달합니다. 그런 다음 GuiFrame의 ActionListener가 Main 클래스의 인터페이스에있는 메소드를 호출하여이를 알립니다.

  3. GuiFrame 클래스에서 마지막으로 클릭 한 버튼의 이름을 저장하고 Main 클래스가 필요할 때 (버튼을 클릭 할 때를 알 필요가없는 경우) 요청합니다.

+0

제안 해 주셔서 감사합니다. 모든 사람들이 더 효율적인지보기 위해 노력할 것입니다. –