JComboBox项目列表

时间:2012-01-29 14:30:03

标签: java swing jcombobox

我想知道如何更改JComboBox中项目列表的名称?这是我的代码 我想把它变成狗,熊猫,蜜蜂。而不是选择他们的道路。

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JComboBox;

public class ComboTest {

    private JLabel imageLabel;
    private JComboBox comboImage;

    private String[] names = {"images/dog.gif","images/bee.gif","images/Panda.gif"};
    private Icon[] icons = {
        new ImageIcon(getClass().getResource(names[0])),
        new ImageIcon(getClass().getResource(names[1])),
        new ImageIcon(getClass().getResource(names[2])),
    };

    public ComboTest(){
        initComponents();
    }

    public void initComponents(){
        JFrame frame = new JFrame("Test Combo");
        frame.setVisible(true);
        frame.setSize(320, 160);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        comboImage = new JComboBox(names);
        comboImage.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent event){
                if(event.getStateChange() == ItemEvent.SELECTED){
                    imageLabel.setIcon(icons[comboImage.getSelectedIndex()]);
                }
            }
        });

        frame.add(comboImage);
        imageLabel = new JLabel(icons[0]);
        frame.add(imageLabel);
    }
}

1 个答案:

答案 0 :(得分:2)

您可能想要创建一个具有两个属性的对象,即要显示的路径和文本。

然后,您将设置toString方法以返回text属性。免责声明:我尚未测试任何此类代码。

public class ValueText {
   private String text;
   private String value;

   public ValueText(final String text, final String value) {
      this.text = text;
      this.value = value;
   }

   @Override
   public String toString() {
      return text;
   }

   public String getValue() {
      return value;
   }
}

然后您可以将初始数组更改为:

private Object[] names = {
   new ValueText("Dog", "images/dog.gif"),
   new ValueText("Bee", "images/bee.gif"),
   new ValueText("Panda", "images/Panda.gif")
};

它应该类似,只是现在,当您检查所选项目时,您可以使用getValue()方法来获取路径。

您可能也对自定义渲染器感兴趣,但可能没有必要使用它: http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

更新在kleopatra在评论中提出一些令人信服的论据之后,我会继续进行修正,您应该在下面阅读。

更常见,更清晰的方法是使用自定义渲染器,即使它非常简单(参见上面的链接)。