我在JDialog上设置12个组合框时遇到问题。前4个是4个人的性别。第二个是他们的性格类型。第三个是他们的职称。
为什么当我改变第一人的性别组合框时,第二,第三,第四性别组合框同时被改变?
为什么他们“联系在一起”?我已经为每个人提供了单独的ActionListener?
与个性组合框和工作组合框相同。
见附图。
对于严重连接它们,我需要做些什么?
此外,Eclipse强迫我在自定义的JComboBoxMW上使用“final”关键字。
请注意,JComboBoxMW没什么特别的。只需通过更好的鼠标滚轮控制扩展JComboBox类。
请参阅下面的部分代码:
public void setUpCrewGender() {
List<String> genderList = new ArrayList<String>(2);
genderList.add("M");
genderList.add("F");
genderComboBoxModel = new DefaultComboBoxModel<String>();
Iterator<String> i = genderList.iterator();
while (i.hasNext()) {
String s = i.next();
genderComboBoxModel.addElement(s);
}
final JComboBoxMW<String> g1 = new JComboBoxMW<String>(genderComboBoxModel);
g1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e1) {
String s1 = (String) g1.getSelectedItem();
g1.setSelectedItem(s1);
}});
g1.setMaximumRowCount(2);
listPane.add(g1);
final JComboBoxMW<String> g2 = new JComboBoxMW<String>(genderComboBoxModel);
g2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e2) {
String s2 = (String) g2.getSelectedItem();
g2.setSelectedItem(s2);
}});
g2.setMaximumRowCount(2);
listPane.add(g2);
final JComboBoxMW<String> g3 = new JComboBoxMW<String>(genderComboBoxModel);
g3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e3) {
String s3 = (String) g3.getSelectedItem();
g3.setSelectedItem(s3);
}});
g3.setMaximumRowCount(2);
listPane.add(g3);
final JComboBoxMW<String> g4 = new JComboBoxMW<String>(genderComboBoxModel);
g4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e4) {
String s4 = (String) g4.getSelectedItem();
g4.setSelectedItem(s4);
}});
g4.setMaximumRowCount(2);
listPane.add(g4);
}
答案 0 :(得分:2)
所有JComboBox共享相同的模型,即genderComboBoxModel
,因此所有视图都将显示相同的模型状态。解决方案:给他们独特的模型。
顺便说一下,考虑使用带有JComboBox编辑器的JTable进行数据输入。
答案 1 :(得分:2)
您为每个ComboBoxModel
使用相同的JComboBox
,但ComboBoxModel
也管理所选项目,因此当一个组合框更新时,所有其他组合框都是更新。
您需要为每个包含您想要显示的数据的组合框创建单独/个人ComboBoxModel