Java JComboBox和Action、新型号等
我有些奇怪的事,我不明白为什么会发生。 我在网上搜索了一下,包括这里,但没有找到答案。 我有3个组合框,2后面跟着1。 它是一个applet转换工具。 每次我在主组合框中选择要转换的字段时,它都会加载另外两个要转换的值。但每次加载后,我选择要转换的内容时,它都会影响ComboBox。 代码如下: //这就是对象//////Java JComboBox和Action、新型号等,java,swing,events,actionlistener,jcombobox,Java,Swing,Events,Actionlistener,Jcombobox,我有些奇怪的事,我不明白为什么会发生。 我在网上搜索了一下,包括这里,但没有找到答案。 我有3个组合框,2后面跟着1。 它是一个applet转换工具。 每次我在主组合框中选择要转换的字段时,它都会加载另外两个要转换的值。但每次加载后,我选择要转换的内容时,它都会影响ComboBox。 代码如下: //这就是对象////// MyEvent handler = new MyEvent(); MainCombo = new JComboBox(issueArray); M
MyEvent handler = new MyEvent();
MainCombo = new JComboBox(issueArray);
MainCombo.setBounds(120, 50, 120, 20);
MainCombo.addActionListener(handler);
add(MainCombo);
Combo1 = new JComboBox(Angle);
Combo1.setBounds(120, 90, 120, 20);
Combo1.addActionListener(handler);
add(Combo1);
Combo2 = new JComboBox(Angle);
Combo2.setBounds(320, 90, 120, 20);
Combo2.addActionListener(handler);
add(Combo2);
//The Method To Change Values In The ComboBox
public void loadIssueParam(String Issue){
Combo1.removeAllItems();
Combo2.removeAllItems();
switch (Issue) {
case "Angle":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Angle);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Area":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Area);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Data":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Data);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Energy":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Energy);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Force":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Force);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Length":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Length);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Mass":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Mass);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Power":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Power);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Pressure":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Pressure);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Speed":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Speed);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Temperature":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Temperature);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Time":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Time);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
case "Volume":
{
DefaultComboBoxModel newModel= new DefaultComboBoxModel(Volume);
Combo1.setModel(newModel);
Combo2.setModel(newModel);
break;
}
}
/// I THINK MAYBE THIS METHOD HAVE SOMETHING TO DO WITH IT - OR I NEED SOME HOW TO
/// CLEAR THE SELECTION.
private class MyEvent implements ActionListener{
@Override
public void actionPerformed(ActionEvent event){
if(event.getSource()==MainCombo){
JComboBox cb=(JComboBox)event.getSource();
IssueBox=(String)cb.getSelectedItem();
loadIssueParam(IssueBox);
}
if(event.getSource()==Combo1){
JComboBox cb=(JComboBox)event.getSource();
fromBox=(String)cb.getSelectedItem();
}
if(event.getSource()==Combo2){
JComboBox cb=(JComboBox)event.getSource();
toBox=(String)cb.getSelectedItem();
}
}
}
每次我进行子选择时,它都会影响两个子组合框
谢谢你的帮助
Niro啊,看了你的代码后,我现在明白你的问题了。您的问题是,两个子组合框共享相同的模型,因此,如果您更改一个子组合框中的选择,它将更改共享模型的状态,从而导致另一个子组合框更改其选择。。要解决您的问题,请为每个人提供自己的模型 i、 e
switch (Issue) {
case "Angle":
{
DefaultComboBoxModel newModel1 = new DefaultComboBoxModel(Angle);
DefaultComboBoxModel newModel2 = new DefaultComboBoxModel(Angle);
Combo1.setModel(newModel1);
Combo2.setModel(newModel2);
break;
}
// etc...
也可以考虑使用一个映射,如<代码> HashMap < /代码>或<代码> HashMap < /代码>。这样做并正确地填充映射,那么巨大的switch语句就可以简化为
Combo1.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
Combo2.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
接下来我们将研究Java命名规则。啊,在看了您的代码之后,我现在理解了您的问题。您的问题是,两个子组合框共享相同的模型,因此,如果您更改一个子组合框中的选择,它将更改共享模型的状态,从而导致另一个子组合框更改其选择。。要解决您的问题,请为每个人提供自己的模型 i、 e
switch (Issue) {
case "Angle":
{
DefaultComboBoxModel newModel1 = new DefaultComboBoxModel(Angle);
DefaultComboBoxModel newModel2 = new DefaultComboBoxModel(Angle);
Combo1.setModel(newModel1);
Combo2.setModel(newModel2);
break;
}
// etc...
也可以考虑使用一个映射,如<代码> HashMap < /代码>或<代码> HashMap < /代码>。这样做并正确地填充映射,那么巨大的switch语句就可以简化为
Combo1.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
Combo2.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
接下来我们将研究Java命名规则。您能发布所有代码,这样人们就可以实际运行它并重现这种行为吗?您能发布所有代码,这样人们就可以实际运行它并重现这种行为吗?非常感谢。解决问题!实际上,我将尝试使用HashMap来实现这一点,这似乎是一种更干净的解决方案。再次感谢,非常感谢。解决问题!实际上,我将尝试使用HashMap来实现这一点,这似乎是一种更干净的解决方案。再次感谢