2013-07-08 1 views
0

정보를 제출하기 위해 JComboBox 및 JButton을 만들었습니다. 스위치 메서드로 정보를 분류하려면 다른 클래스에 정보를 보내야합니다. 그러나 그것은 ActionListener 내부에서 생성 된 문자열이 다른 클래스에서 인식되지 않는 것처럼 보입니다.ActionListener에서 Java의 다른 클래스로 문자열을 가져올 수 없습니다.

public Main() { 
    final JComboBox comboB = new JComboBox(b);   //add int b in here for array 
    comboB.setBounds(50, 30, 123, 20); 
    contentPane.add(comboB); 

    JButton btnTest = new JButton("Test"); 
    btnTest.setBounds(300, 350, 89, 23); 
    contentPane.add(btnTest); 

    btnTest.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String s = (String)comboB.getSelectedItem(); 
     } 
    }); 
} 

다른 클래스에서 String을 인식하도록하려면 어떻게해야합니까? ComboBox에서 선택한 항목에 따라 액션이 변경되는 별도의 클래스가 있지만이 정보를 얻지 못하는 것 같습니다. 고맙습니다.

+0

1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) Java GUI는 다른 플랫폼 해상도와 다른 PLAF 사용으로 작동해야 할 수도 있습니다. 따라서 구성 요소의 정확한 배치에 도움이되지 않습니다. 견고한 GUI를 위해 구성 요소를 구성하려면 대신 공백에 대한 레이아웃 패딩 및 테두리와 함께 레이아웃 관리자 또는 그 조합을 사용하십시오. 3) 코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. –

+1

문자열을 인스턴스 변수, 가급적이면'private'으로 만들고,'public String getS() {return this.s; }' – jonhopkins

답변

2

먼저 다른 개체는 ActionListener을 콤보 상자에 등록하는 방법이 필요합니다. 나는 당신의 클래스에 addActionListener 방법을 제공 제안,이,이 comboB

세 번째 변수 클래스 인스턴스해야 할 것입니다 의미, 둘째 comboB

에 프록시 방법과 간단한 패스로 전화를 행동 것 다른 클래스는 액션이 ​​콤보 상자에서 시작되었는지 여부를 결정해야 할 필요가 있습니다. 이제

@Override 
public void actionPerformed(ActionEvent e) { 
    if (e.getSource() instanceof JComboBox) { 
     JComboBox cb = (JComboBox)e.getSource(); 
     String s = (String)cb.getSelectedItem(); 
    } 
} 

,이 질문에 대한 가능한 많은 컨텍스트가 아니지만, 개인적으로, 나는 일반적으로 하나 귀하의 UI 클래스 업데이트 것이라고 어떤 종류의 모델을 사용 및/또는 다른 클래스가 등록 할 수 PropertyChangeListener 있음 메인 클래스의 "속성"에 대한 변경을 모니터하고 모니터합니다.

1

자바 스윙이 MVC pattern을 구현하기 때문에 JComboBox의 모델 참조를 다른 객체에 전달할 수 있습니다.

모델은 관찰자 패턴을 구현하므로 모델이 변경 될 때 즉시 알림을 받아야하는 경우 다른 개체가 자신을 등록 할 수 있습니다.

public class Main { 
    public initializeComponent(OtherClass otherClass) { 
     ... 
     JComboBox comboBox = ...; 
     ComboBoxModel comboBoxModel = comboBox.getModel(); 
     otherClass.setComboBoxModel(comboBoxModel); 
    } 
} 

public class OtherClass { 

    private ComboBoxModel comboBoxModel; 

    public void setComboBoxModel(ComboBoxModel comboBoxModel) { 
     this.comboBoxModel = comboBoxModel; 
     ListDataListener listener = ...; 
     comboBoxModel.addListDataListener(listener); 
    } 

    public String getSelectedItem(){ 
     Object selectedItem = comboBoxModel.getSelectedItem(); 
     ... 
    } 
} 
2

개인 메서드를 만들고 콤보를 호출하면됩니다. 그런 다음 구성 요소/클래스로 이동하여 조치를 수행하십시오.

public Main() { 
    final JComboBox comboB = new JComboBox(b);   //add int b in here for array 
    comboB.setBounds(50, 30, 123, 20); 
    contentPane.add(comboB); 

    JButton btnTest = new JButton("Test"); 
    btnTest.setBounds(300, 350, 89, 23); 
    contentPane.add(btnTest); 

    btnTest.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String s = (String)comboB.getSelectedItem(); 
      myMethodThatProcessesS(s); 

     } 
    }); 
} 

private void myMethodThatProcessesS(String s) { 
    contentPane.getSomeOtherComponent().doSOmething(s); 
} 
관련 문제