2013-07-08 24 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(); 
     } 
    }); 
} 

我該如何讓它可以被其他類識別?我有一個單獨的類,將根據從ComboBox中選擇的內容來更改操作,但我似乎無法獲取此信息。謝謝。

+0

1)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 2)Java GUI可能需要在多種平臺上工作,使用不同的屏幕分辨率並使用不同的PLAF。因此,它們不利於組件的準確放置。要爲可靠的GUI組織組件,請使用佈局管理器或它們的組合,以及用於空白區域的佈局填充和邊框。 3)對代碼塊使用一致的邏輯縮進。代碼的縮進旨在幫助人們理解程序流程。 –

+1

使字符串成爲一個實例變量,最好是'private',並創建一個get方法,如'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

由於java swing實現了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); 
} 
相關問題