我在两个不同的类中有两个组合框。我的要求是,如果我改变了一个类中的数据,数据应该显示在其他类中。有听众或其他方式吗?你能帮我吗?
虽然这是一个GUI程序,但是Java OOP实践的原则仍然保持不变。您为一个类提供公共setter方法以允许其他类更改其属性,并且您允许其他类(通常是"控制"类,例如侦听第一个JComboBox的类)通过调用第一个类的实例的setter方法来调用这些方法。
你应该学习模型-视图-控制器原理的基础知识,通常缩写为"MVC"。组合框由
组成- 视图(可视化表示),
- 一个控制器(点击打开,选择一个条目)和
- 一个模型(在JComboBox的情况下,它是一个ComboBoxModel)。
对于您的目的,听起来您希望做的是
- 在两个组合框之间共享模型或
- 添加一个ActionListener和/或ItemListener到一个组合框,将通知另一个更改
请注意,共享模型还意味着在一个框中被选中的东西在另一个框中也被选中。模型封装了选择状态和项目列表。解决这个问题的一种方法是在模型中建立模型。两个组合框都可以有自己的ComboBoxModel和自己的选择状态等等,但是为项目列表共享一个底层的辅助模型。对项目列表的更新对两者都是可见的。然而,这意味着你自己实现ComboBoxModel或子类DefaultComboBoxModel以覆盖默认行为的方式。
我建议您查看Swing教程以及阅读使用模型-视图-控制器模式。
您可以使用第二个类的对象,然后访问该类的textfield设置值
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ComboBox{
JComboBox combo;
JTextField txt;
static ComboBox b1 = null;
static ComboBox b2 = null;
public static void main(String[] args) {
b1 = new ComboBox();
b2 = new ComboBox();
}
public ComboBox(){
String course[] = {"BCA","MCA","PPC","CIC"};
JFrame frame = new JFrame("Creating a JComboBox Component");
JPanel panel = new JPanel();
combo = new JComboBox(course);
combo.setBackground(Color.gray);
combo.setForeground(Color.red);
txt = new JTextField(10);
panel.add(combo);
panel.add(txt);
frame.add(panel);
combo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent ie){
String str = (String)combo.getSelectedItem();
b1.txt.setText(str);
b2.txt.setText(str);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);
frame.setVisible(true);
}
}