java 动态 JComboBox
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3191837/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Dynamic JComboBoxes
提问by Pujan Srivastava
I have following data (String):
我有以下数据(字符串):
Course1: A1
Course1: A2
Course2: B1
Course2: B2
Course2: B3
Course2: B4
Course3: C1
Course3: C2
I'd like to create two JComboBox(JComboBox1, JComboBox2) so that JComboBox1 contains Course1,Course2,Course3, etc.
我想创建两个JComboBox(JComboBox1、JComboBox2),以便 JComboBox1 包含 Course1、Course2、Course3 等。
If I select, say, Course2 from JComboBox1 then corresponding B1,B2,B3,B4 should be populated in JComboBox2.
如果我从 JComboBox1 中选择 Course2,那么相应的 B1、B2、B3、B4 应该填充在 JComboBox2 中。
How to implement this? Many Thanks.
如何实施?非常感谢。
回答by trashgod
Yes, simply create a DefaultComboBoxModelfor each set, and do setModel()on JComboBox2when JComboBox1changes.
是的,只需创建一个DefaultComboBoxModel为每一组,做setModel()对JComboBox2的时候JComboBox1改变。
Addendum: For example,
附录:例如,
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());
}
}
回答by Mark Elliot
Yes. You can add a change event listener to the first JComboBox that updates the values of the second JComboBox.
是的。您可以向第一个 JComboBox 添加更改事件侦听器,以更新第二个 JComboBox 的值。
Something like this
像这样的东西
// 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(...){
// ...
}
}
});

