gpt4 book ai didi

java - JComboBox 和 Action、新模型等

转载 作者:行者123 更新时间:2023-12-02 00:10:13 25 4
gpt4 key购买 nike

我有一些奇怪的事情,我无法理解为什么会发生。我搜索了网络,包括这里,但找不到答案。我有 3 个 ComboBox,其中 2 个后面跟着 1 个。它是一个小程序转换工具。每次我在主组合框中选择要转换的字段时,都会加载其他两个字段以进行转换。但每次加载后,我都会选择要转换的内容,从而影响 ComboBox。这是代码: //这是对象//////

     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();
}
}
}

每次我进行子选择都会影响两个子组合框。

感谢您的帮助 尼罗

最佳答案

啊,看了你的代码我现在明白你的问题了。您的问题是两个子组合框共享相同的模型,因此如果您更改一个子组合框中的选择,它会更改共享模型的状态,导致另一个子组合框更改其选择。解决你的问题,给他们每个人自己的模型。

即,

switch (Issue) {
case "Angle":
{
DefaultComboBoxModel newModel1 = new DefaultComboBoxModel(Angle);
DefaultComboBoxModel newModel2 = new DefaultComboBoxModel(Angle);
Combo1.setModel(newModel1);
Combo2.setModel(newModel2);
break;
}
// etc...

此外,请考虑使用 map ,例如 HashMap<String, String[]>HashMap<String, Vector<String>> 。这样做并正确填充 Map,那么巨大的 switch 语句可以简化为

Combo1.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));
Combo2.setModel(new DefaultComboBoxModel(modelMap.get(Issue)));

接下来我们将研究 Java 命名规则。

关于java - JComboBox 和 Action、新模型等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com