Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JComboBox多次显示相同的条目_Java_Swing_User Interface_Jcombobox - Fatal编程技术网

Java 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

我有一个JComboBox,我正在向它传递一个字符串数组。某些值在该数组中多次出现。组合框呈现正确,但我无法选择所有条目

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);