我知道JList
和JComboBox
。我需要具有多重选择功能的组合框下拉功能JList
。
这是因为列表的内容太大而无法使用简单的列表来显示。我还需要选择多个项目,否则我会满足于JComboBox
.
有什么建议么?
我知道JList
和JComboBox
。我需要具有多重选择功能的组合框下拉功能JList
。
这是因为列表的内容太大而无法使用简单的列表来显示。我还需要选择多个项目,否则我会满足于JComboBox
.
有什么建议么?
使用多选时,最好使用列表而不是组合框。正如 GUI 隐喻一样,人们期望组合框是单选的,而列表可以是单选的。
列表内容太大,无法使用简单列表显示
将. JList
_ JScrollPane
您可以调用setVisibleRowCount(int)来JList
指定一次应该显示多少行。
您可以为组合框制作自定义单元格渲染器并向该组件添加复选框,以便您可以选中和取消选中它们。你必须做这样的事情:
public class MyComboBoxRenderer implements ListCellRenderer {
private String[] items;
private boolean[] selected;
public MyComboBoxRenderer(String[] items){
this.items = items;
this.selected = new boolean[items.lenght];
}
public Component getListCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int index) {
// Create here a JLabel with the text
// Create here a JCheckBox
// Add them to a layoutmanager
return this;
}
public void setSelected(int i, boolean flag)
{
this.selected[i] = flag;
}
}
如果您的数据具有分层特征,请考虑 NetBeans 的Outline
组件,在宣布新的 Swing 树表和此答案中进行了讨论。这是 API 的当前开发版本。
为了实现所描述的功能,我最终决定“滥用”JMenuBar
并添加几个JCheckBoxMenuItems
. 然后 GUI 完全符合目的(至少对我而言),只是 ItemEvent 的处理有可能变得有点烦人。
(最后,我在项目上定义了一些位逻辑,然后可能会限制自己只处理一种类型的事件)