如何在多个项目选择的java swing中创建一个下拉列表?

时间:2010-05-18 19:05:33

标签: java swing drop-down-menu multipleselection

我知道JListJComboBox。我需要具有JList提供的多种选择功能的组合框下拉功能。

这是因为列表的内容太大而无法使用简单列表显示。我还需要选择多个项目,否则我会满足于JComboBox

有什么建议吗?

4 个答案:

答案 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的处理有可能变得有点烦人。

(最后,我在项目上定义了一些逻辑,然后可能会限制自己只处理一种类型的事件)