是否可以为JComboBox中的选项提供类似于表格的显示?

时间:2017-07-27 15:39:47

标签: java swing

基本上我想在JComboBox中显示有一个或两个与它们相关的附加信息变量的选项,我想以更加结构化的方式向用户显示信息,而不仅仅是附加它们。

换句话说,我希望JComboBox中的选项看起来像这样:

John Smith     Male    01/01/1980
Jane Harrison  Female  01/01/1980

我不想要的是简单地附加所有信息,使其看起来像这样:

John Smith (Male, 01/01/1980)
Jane Harrison (Female, 01/01/1980)

我很抱歉,如果这是重复的,但在我看来,关键字JComboBox和表的大多数问题是关于“相反”的问题,即将JComboBox放在表中。

1 个答案:

答案 0 :(得分:1)

我最终选择了一个完全不同的解决方案,但认为这个答案可能最终会使某些人受益。

您实际上可以使用JComboBox自行设计ListCellRenderer中的选项外观。看到这个粗略的例子:

String[][] ar = {{"aasdf","ff"},{"fd","werewfewf"}};
JComboBox<String[]> box = new JComboBox<>(ar);
box.setRenderer(new TableListCellRenderer());
getContentPane().add(box,BorderLayout.NORTH); // You can add it wherever you want

这是TableListCellRenderer

的课程
class TableListCellRenderer
implements ListCellRenderer<String[]>
{
    @Override
    public Component getListCellRendererComponent(JList<? extends String[]> list,
                                               String[] value,
                                               int index,
                                               boolean isSelected,
                                               boolean cellHasFocus) {
        JPanel ret = new JPanel(new GridLayout(1,2));
        ret.add(new JLabel(value[0]));
        ret.add(new JLabel(value[1]));
        return ret;
    }
}

请参阅下面的截图。您可以看到在实践中使用它之前需要解决一些缺陷,但大多数缺陷都可以通过使用JPanel的布局来解决。

Screenshot of example

有关详细信息,请参阅the tutorial page on the JComboBoxthe javadoc on the ListCellRenderer interface(其中包含一个有用的简单示例)。