gpt4 book ai didi

java - ListCellRenderer 未在子组件上触发事件

转载 作者:行者123 更新时间:2023-12-02 08:38:49 25 4
gpt4 key购买 nike

以下 ListCellRenderer 不接收嵌套 ComboBox 上的单击事件。我需要启用某些功能吗?

class FilterCellRenderer implements ListCellRenderer {

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Filter filter = (Filter)value;

JPanel filterPanel = new JPanel();
FlowLayout layout = new FlowLayout();
layout.setAlignment(FlowLayout.LEFT);
filterPanel.setLayout(layout);
filterPanel.add(new JLabel(filter.getLabel()));

final List<Object> options = filter.getOptions();
if (options.size() > 1) {
JComboBox optionCombo = new JComboBox(new AbstractComboBoxModel() {

public int getSize() {
return options.size();
}

public Object getElementAt(int index) {
return options.get(index);
}
});
optionCombo.setSelectedItem(filter.getValue());
filterPanel.add(optionCombo);
}

if (isSelected) {
filterPanel.setBackground(list.getSelectionBackground());
filterPanel.setForeground(list.getSelectionForeground());
}
return filterPanel;
}

}

最佳答案

swing 中的渲染器组件就像“橡皮图章”一样工作 - 它们仅用于渲染/绘制值,并且不会以通常的方式添加到父容器(试想一下如何将单个组件添加到多个位置! )。

听起来您可能需要一个编辑器而不是渲染器(编辑器是一个成熟的组件,可以在任何给定时间添加到一个位置)。如果失败,您将不得不在 JList 上安装 MouseListener。

关于java - ListCellRenderer 未在子组件上触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/187687/

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