我想知道如何更改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);
}
}
答案 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在评论中提出一些令人信服的论据之后,我会继续进行修正,您应该在下面阅读。
更常见,更清晰的方法是使用自定义渲染器,即使它非常简单(参见上面的链接)。