动态 JComboBoxes
Posted
技术标签:
【中文标题】动态 JComboBoxes【英文标题】:Dynamic JComboBoxes 【发布时间】:2011-03-12 15:12:57 【问题描述】:我有以下数据(字符串):
Course1: A1
Course1: A2
Course2: B1
Course2: B2
Course2: B3
Course2: B4
Course3: C1
Course3: C2
我想创建两个JComboBox(JComboBox1、JComboBox2),让JComboBox1包含Course1、Course2、Course3等。
如果我从 JComboBox1 中选择 Course2,则对应的 B1、B2、B3、B4 应填充到 JComboBox2 中。
如何实现?非常感谢。
【问题讨论】:
检查JList
的类似示例here。
【参考方案1】:
是的,只需为每个集合创建一个DefaultComboBoxModel
,并在JComboBox1
更改时对JComboBox2
执行setModel()
。
附录:例如,
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ComboTest extends JPanel implements ActionListener, Runnable
private final JComboBox combo1 = new JComboBox(
new String[]"Course 1", "Course 2", "Course 3");
private final JComboBox combo2 = new JComboBox();
private ComboBoxModel[] models = new ComboBoxModel[3];
public ComboTest()
models[0] = new DefaultComboBoxModel(
new String[]"A1", "A2");
models[1] = new DefaultComboBoxModel(
new String[]"B1", "B2", "B3", "B4");
models[2] = new DefaultComboBoxModel(
new String[]"C1", "C2");
combo2.setModel(models[0]);
this.add(combo1);
this.add(combo2);
combo1.addActionListener(this);
@Override
public void actionPerformed(ActionEvent e)
int i = combo1.getSelectedIndex();
combo2.setModel(models[i]);
@Override
public void run()
JFrame f = new JFrame("ComboTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
public static void main(String[] args)
EventQueue.invokeLater(new ComboTest());
【讨论】:
@PujanSrivastava:也可以考虑List<ComboBoxModel>
;在 Java 7 中,List<ComboBoxModel<String>>
.
@trashgod 这个例子是针对桌面应用程序的,你能指点一下在 Web 应用程序的情况下该怎么做吗?
@SaumilSoni:模型原理是一样的,不过具体看你的框架,example。【参考方案2】:
是的。您可以将更改事件侦听器添加到第一个 JComboBox 以更新第二个 JComboBox 的值。
类似的东西
// first comboBox
final JComboBox courseBox = new JComboBox(
new String[]"Course 1", "Course 2", "Course 3");
final JComboBox box2 = new JComboBox();
// Now listen for changes
courseBox.addActionListener(new ActionListener()
void actionPerformed(ActionEvent e)
if(courseBox.getSelectedItem().equals("Course 1"))
// we know that the user picked "Course 1", now change box2 to match
// first clear everything
box2.removeAllItems();
// now add back relevant values
box2.addItem("A1");
box2.addItem("A2");
else if(...)
// ...
);
【讨论】:
以上是关于动态 JComboBoxes的主要内容,如果未能解决你的问题,请参考以下文章
算法动态规划 ② ( 动态规划四要素 | 动态规划状态 State | 动态规划初始化 Initialize | 动态规划方程 Function | 动态规划答案 Answer )
算法动态规划 ② ( 动态规划四要素 | 动态规划状态 State | 动态规划初始化 Initialize | 动态规划方程 Function | 动态规划答案 Answer )