Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';在Java中,无法从ActionListener获取字符串到不同的类_Java_Swing_Awt_Actionlistener_Jcombobox - Fatal编程技术网

我能';在Java中,无法从ActionListener获取字符串到不同的类

我能';在Java中,无法从ActionListener获取字符串到不同的类,java,swing,awt,actionlistener,jcombobox,Java,Swing,Awt,Actionlistener,Jcombobox,我创建了一个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); contentP

我创建了一个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();
        }
    });
 }

如何使字符串s可以被其他类识别?我有一个单独的类,它将根据从ComboBox中选择的内容来更改操作,但我似乎无法获得这些信息。谢谢。

首先,其他对象需要某种方式将
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
,其他类可以注册并监视主类“属性”的更改,其他对象需要某种方式将
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
由于JavaSwing实现了,所以可以将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();
        ...
    }
}

由于JavaSwing实现了,您可以将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();
        ...
    }
}

您只需要创建一个私有方法,并让combo调用它。然后,您只需导航到组件/类,并执行操作

    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);
}

您只需要创建一个私有方法,并让combo调用它。然后,您只需导航到组件/类,并执行操作

    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);
}

1) 为了更快地获得更好的帮助,请发布一个。2) javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请使用布局管理器或它们的组合,以及空白的布局填充和边框。3) 对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程。将字符串作为实例变量,最好是
private
,并创建一个get方法,如
public string get(){return this.s;}
1)要更快地获得更好的帮助,请发布一个。2) javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请使用布局管理器或它们的组合,以及空白的布局填充和边框。3) 对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。将字符串作为实例变量,最好是
private
,并创建一个get方法,如
public string get(){return this.s;}