JComboBox的问题

时间:2012-04-16 17:45:51

标签: java swing jcombobox

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Test1{
    JComboBox combo;
    JTextField txt;

    public static void main(String[] args) {
        Test1 b = new Test1();
    }

    public Test1(){
        String degrees[] = {"AAS1","AAS2","AAS1","AAS3"};
        JFrame frame = new JFrame("Creating a JComboBox Component");
        JPanel panel = new JPanel();

        combo = new JComboBox(degrees);
        combo.setEditable(true);
        combo.setBackground(Color.gray);
        combo.setForeground(Color.red);

        txt = new JTextField(10);
        txt.setText("1");

        panel.add(combo);
        panel.add(txt);
        frame.add(panel);

        combo.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent ie){
                txt.setText(String.valueOf(combo.getSelectedIndex()+1));
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,400);
        frame.setVisible(true);

    } }

从上面的代码中可以看出。我有4个项目的JComboBox。如果没有相同的项目,一切正常。

但在我的例子中(“AAS1”,“AAS2”,“AAS1”,“AAS3”)第一和第三项是相同的,我在这种情况下遇到问题。 当我选择任何项目时,我想在JTextField中获取它的索引,但是当我选择第三项时,我得到第一项的索引。 有什么想法吗?

4 个答案:

答案 0 :(得分:4)

那是因为JComboBox使用equals来检查项目是否相等。在您的情况下,这两个String是相等的,因此它返回匹配的第一个索引。如果你真的需要这样做,你可能需要像这样定义你自己的项类:

private static class MyItem {
    private String value;

    public MyItem(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return value; //this is what display in the JComboBox
    }
}

然后添加如下项目:

MyItem degrees[] = {new MyItem("AAS1"),new MyItem("AAS2"),new MyItem("AAS1"),new MyItem("AAS3")};
JComboBox combo = new JComboBox(degrees);

答案 1 :(得分:2)

创建一个类似的类:

class ComboItem{

    private String name;

    public ComboItem(String name){
        this.name = name;
    }

    public String toString() {
        return name;
    }
}

并创建你的组合框:

comboBox = new JComboBox(new ComboItem[]{
    new ComboItem("AAS1"),
    new ComboItem("AAS2"),
    new ComboItem("AAS1"),
    new ComboItem("AAS3")
});

答案 2 :(得分:0)

您必须分别如何计算String项目的等值和有效表示。我认为这可以通过为您的目的创建一个特定的类来完成,而不是String使用它。

由于这可能是作业,我不会给出确切的结果,只需考虑JComboBox如何在内部选择指定的索引。

答案 3 :(得分:0)

尝试使用combo.getSelectedItem()代替。由于字符串数组中有两个不同的字符串,您应该能够进行参考比较并区分两者。