我能';在Java中,无法从ActionListener获取字符串到不同的类
我创建了一个JComboBox和JButton来提交信息。我需要将信息发送到另一个类,以便使用switch方法对其进行排序。但是看起来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
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;}