JComboBox 每次更改时都会更改显示的文本

问题描述 投票:0回答:1

每次单击/更改任何选项时,我都试图编辑显示的文本(在 JComboBox 本身,而不是选项的下拉弹出窗口中)。

我有一个自定义渲染器,看起来有点像下面的:

JComboBox<Object> jc = new JComboBox<Object>();
jc.setRenderer(new ListCellRenderer<Object>() {
    @Override
    public Component getListCellRendererComponent(JList<? extends Item> list,
                                                  Object value, int index, 
                                                  boolean isSelected,
                                                  boolean cellHasFocus) {
        if(index == -1)
            return new JLabel("this is the top cell");

        return new JLabel("this is a cell in the dropdown popup area");
    }
});

每当调用渲染器时,这会成功更改文本。问题是每次单击条目时都不会调用此渲染器。

我曾尝试在我的类中进行自定义事件调用以扩展 JComboBox,但是在尝试调用更改时,我不确定如何指定我只想更改顶部文本(并保留下拉列表的其余部分单独的细胞)。我一直在搞乱方法:

fireItemStateChanged(new ItemEvent(this,ItemEvent.ITEM_STATE_CHANGED,
                                               somethingGoesHere,
                                               ItemEvent.DESELECTED));

但我不知道要用什么项目对象代替

somethingGoesHere
来指定调用重新渲染到顶部文本。
dataModule.getElementAt(int index)
中的所有条目似乎都没有创建更改正确文本的调用。

(我的 JComboBox 扩展类进行了较大的更改,包括使下拉弹出窗口在单击选项时不会自动隐藏,这可能是顶部文本没有像预期的那样频繁更改的原因,我正在尝试调用渲染器靠我自己。)

编辑:

经过一些测试,问题是即使再次单击先前选择的下拉项,我也希望 JComboBox 显示位刷新。

我尝试覆盖

setSelectedItem(Object anObject)
以调用
selectedItemChanged()
,即使在
selectedItemReminder == dataModule.getSelectedItem()
时也是如此,但这不会强制更新 JComboBox 显示文本。 :(

java swing jcombobox
1个回答
0
投票

我想我明白了!

我需要显式调用的事件是 DefaultComboBoxModel 中的

fireContentsChanged(this, -1, -1)
,所以我将 that 类扩展到自定义模型中,这样我的 JComboBox 扩展可以告诉模型运行该方法。这成功地强制 ListCellRenderer 更新我正在尝试更改的显示文本。

DefaultComboBoxModel 通常是从模型的

setSelectedItem(Object anObject)
方法调用更新 JComboBox 的显示文本的模型。

© www.soinside.com 2019 - 2024. All rights reserved.