我知道JList
和JComboBox
。我需要具有JList
提供的多种选择功能的组合框下拉功能。
这是因为列表的内容太大而无法使用简单列表显示。我还需要选择多个项目,否则我会满足于JComboBox
。
有什么建议吗?
答案 0 :(得分:8)
使用多选时,最好使用列表而不是组合框。随着GUI隐喻的出现,人们期望组合框是单选,而列表可以是。
列表内容太大,无法使用简单列表显示
将JList
放入JScrollPane
。您可以在JList
上致电setVisibleRowCount(int),以指定一次显示的行数。
答案 1 :(得分:3)
您可以为组合框创建自定义单元格渲染器,并为该组件添加复选框,以便您可以选中和取消选中它们。你必须做这样的事情:
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;
}
}
答案 2 :(得分:2)
如果您的数据具有分层特征,请考虑在Announcing the new Swing Tree Table和此answer中讨论的NetBeans Outline
组件。这是API的Current Development Version。
答案 3 :(得分:1)
为了实现所描述的功能,我终于决定"滥用" DB.Execute "UPDATE tblDEBIT20 SET CURRENTNAME = '" & strCurrent & "' WHERE DEBIT_NUM = '" & strDebit & "'"
并添加了几个 [ my_list[i] for i in range(len(my_list)) if i not in to_delete ]
。 GUI然后完全符合目的(至少对我来说),只是对ItemEvent的处理有可能变得有点烦人。
(最后,我在项目上定义了一些逻辑,然后可能会限制自己只处理一种类型的事件)