Java 让JComboBox在选择项目时更改显示的项目
当我展开组合框列表时,我应该看到诸如“一”“二”“三”之类的项目,但是当我选择,比如说,“一”并折叠组合框时,我希望看到显示的是“1”,而不是“一” 我已经尝试将一个Java 让JComboBox在选择项目时更改显示的项目,java,swing,jcombobox,listeners,changelistener,Java,Swing,Jcombobox,Listeners,Changelistener,当我展开组合框列表时,我应该看到诸如“一”“二”“三”之类的项目,但是当我选择,比如说,“一”并折叠组合框时,我希望看到显示的是“1”,而不是“一” 我已经尝试将一个ListDataListener添加到组合框中,并在contentsChanged()中添加了一个ListDataListener box.getEditor().setItem(my_-map.get(“one”))其中my_-map存储从“one”到“1”等的映射 但是,它不起作用,我不知道为什么。。调用覆盖我的更改的conte
ListDataListener
添加到组合框中,并在contentsChanged()中添加了一个ListDataListener
box.getEditor().setItem(my_-map.get(“one”))
其中my_-map存储从“one”到“1”等的映射
但是,它不起作用,我不知道为什么。。调用覆盖我的更改的contentsChanged()
后是否发生了什么
有什么想法吗 一种方法是不更改内容,而是提供一个适当的渲染器,在绘制过程中检查它是否在弹出窗口中
概念验证代码片段如下所示:
JComboBox box = new JComboBox(new String[] { "One|1", "Two|2", "Three|3" });
box.setRenderer(new ListCellRenderer<String>() {
private JList<? extends String> list;
private final JLabel label = new JLabel() {
@Override
public void paintComponent(Graphics g) {
// Check if parent's parent is the combobox or the dropdown
int part = getParent().getParent() == list ? 0 : 1;
label.setText(label.getText().split("\\|")[part]);
super.paintComponent(g);
}
};
@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) {
this.list = list;
label.setText(value);
label.setOpaque(true);
if (isSelected) {
label.setForeground(list.getSelectionForeground());
label.setBackground(list.getSelectionBackground());
} else {
label.setForeground(list.getForeground());
label.setBackground(list.getBackground());
}
return label;
}
});
JComboBox=newjcombobox(新字符串[]{“一|一”、“二|二”、“三|三”});
setRenderer(新的ListCellRenderer()){
private JList你能粘贴与此问题相关的代码吗?谢谢Howard。看起来它会起作用。早些时候,我通过调用box.setSelectedItem()
而不是box.getEditor().setItem()
。我必须在逻辑上做一些事情来抑制以下contentsChanged())
因为box.setSelectedItem()
会再次触发对它的调用。