如何将一个组合框的数据影响到swing中两个不同类中可用的另一个组合框



我在两个不同的类中有两个组合框。我的要求是,如果我改变了一个类中的数据,数据应该显示在其他类中。有听众或其他方式吗?你能帮我吗?

虽然这是一个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);
  }
}