0

我创建了一个 JComboBox 和 JButton 来提交信息。我需要将信息发送到不同的类以使用 switch 方法对其进行排序。但看起来在 ActionListener 中创建的字符串没有被其他类识别。

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 中选择的内容更改操作,但我似乎无法获取此信息。谢谢你。

4

3 回答 3

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);
}
于 2013-07-08T06:53:40.457 回答
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其他类可以注册并监视对“主类的属性”。

于 2013-07-08T05:50:00.930 回答
1

由于 java swing 实现了MVC 模式,您可以将 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();
        ...
    }
}
于 2013-07-08T06:07:21.753 回答