基本上我想在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放在表中。
答案 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的布局来解决。
有关详细信息,请参阅the tutorial page on the JComboBox和the javadoc on the ListCellRenderer interface(其中包含一个有用的简单示例)。