gpt4 book ai didi

java - 让 JComboBox 在选择项目时更改显示的项目

转载 作者:行者123 更新时间:2023-12-02 07:20:18 27 4
gpt4 key购买 nike

当我展开组合框列表时,我应该看到诸如“一”“二”“三”之类的项目,但是当我选择“一”并折叠组合框时,我希望看到显示“1”而不是“一”。

我尝试将 ListDataListener 添加到组合框并在 contentsChanged() 中添加box.getEditor().setItem(my_map.get("one")) 其中 my_map 存储从“one”到“1”等的映射。

但是,它不起作用,我不知道为什么。调用 contentsChanged() 后是否会发生某些事情覆盖我的更改?

有什么想法吗?

最佳答案

一种方法是不更改内容,但提供适当的渲染器,在绘制期间检查内容是否位于弹出窗口内。

enter image description here

概念验证代码片段如下所示:

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

注意:上面的示例并未正确处理所有方面(例如焦点边框...),而只是提示您如何进一步进行。

关于java - 让 JComboBox 在选择项目时更改显示的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343801/

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