Java JComboBox多次显示相同的条目
我有一个JComboBox,我正在向它传递一个字符串数组。某些值在该数组中多次出现。组合框呈现正确,但我无法选择所有条目Java JComboBox多次显示相同的条目,java,swing,user-interface,jcombobox,Java,Swing,User Interface,Jcombobox,我有一个JComboBox,我正在向它传递一个字符串数组。某些值在该数组中多次出现。组合框呈现正确,但我无法选择所有条目 String[] entrys = {"A", "B", "C", "A"}; JComboBox combo = new JComboBox(entrys); 在本例中,我将无法选择第二个A,因为数组前面已经有一个A combo.addItemListener(new ItemListener() { @Override public void itemS
String[] entrys = {"A", "B", "C", "A"};
JComboBox combo = new JComboBox(entrys);
在本例中,我将无法选择第二个A
,因为数组前面已经有一个A
combo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED)
System.out.println(combo.getSelectedIndex());
}
});
如果我按下第二个A
,它仍会选择第一个并打印0
- 什么是最好的方式让它工作李>
- 我必须写一封信吗 自定义组合框模型
因此,基本上,
JComboBox
是在getSelectedIndex
方法中进行此操作的
public int getSelectedIndex() {
Object sObject = dataModel.getSelectedItem();
int i,c;
E obj;
for ( i=0,c=dataModel.getSize();i<c;i++ ) {
obj = dataModel.getElementAt(i);
if ( obj != null && obj.equals(sObject) )
return i;
}
return -1;
然后我们需要映射字符串值
String[] entrys = {"A", "B", "C", "A"};
Wrapper[] wrappers = Arrays.stream(entrys).map((String t) -> new Wrapper(t)).toArray(Wrapper[]::new);
JComboBox<Wrapper> b = new JComboBox<>(wrappers);
String[]entrys={“A”、“B”、“C”、“A”};
Wrapper[]wrappers=Arrays.stream(entrys).map((String t)->new Wrapper(t)).toArray(Wrapper[]::new);
JComboBox b=新的JComboBox(包装器);
我们都准备好了。请记住,当您使用getSelectedItem
时,您处理的是Wrapper
类,而不是String
s,因此您需要将它们展开为什么您的条目中有第二个a
呢?我只需要将其用于我的UI,这将花费太长的时间来解释。。。例如,它可能是一个文件名(不是完整路径),如果您选择它,如果它是图像,它将显示预览。谢谢!我已经在使用一个可以用作包装器的类(只是没有发布它以保持代码简单),但是我不知道自定义单元格呈现器的可能性,并且我无法将这个类覆盖到String方法。我想我只是想告诉自己定制的单元格渲染器可以这样做。
String[] entrys = {"A", "B", "C", "A"};
Wrapper[] wrappers = Arrays.stream(entrys).map((String t) -> new Wrapper(t)).toArray(Wrapper[]::new);
JComboBox<Wrapper> b = new JComboBox<>(wrappers);