Java setSelectedIndex(-1)不适用于JComboBox

Java setSelectedIndex(-1)不适用于JComboBox,java,swing,jcombobox,Java,Swing,Jcombobox,这是我的JavaSwingUI代码。基本上,我有两个组合框,我试图将这两个框的默认索引都设置为-1(空白)。setSelectedIndex(-1)在第一个索引中工作正常,但在第二个索引中工作不正常。这是否与第一个ActionListener有关?但向下移动也不起作用 public Panel(JFrame parent) { this.setBounds(0, 0, 0, 0); this.setBorder(new EmptyBorder(5, 5, 5, 5));

这是我的JavaSwingUI代码。基本上,我有两个组合框,我试图将这两个框的默认索引都设置为-1(空白)。
setSelectedIndex(-1)
在第一个索引中工作正常,但在第二个索引中工作不正常。这是否与第一个
ActionListener
有关?但向下移动也不起作用

public Panel(JFrame parent) {
    this.setBounds(0, 0, 0, 0);
    this.setBorder(new EmptyBorder(5, 5, 5, 5));
    this.setLayout(null);

    ...     

    // This is working
    fstCB = new JComboBox(SomeEnum.values());
    fstCB.setSelectedIndex(-1);
    fstCB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // Do something
            }
        }
    });
    fstCB.setEditable(true);
    this.add(fstCB);

    // This is not working.
    JComboBox<String> sndCB = new JComboBox<String>();
    sndCB.setSelectedIndex(-1);
    sndCB.setVisible(false);
    this.add(sndCB);

    List<String[]> rs = db.select("SELECT smth FROM table", 1);
    for (String[] r : rs) {
        sndCB.addItem(r[0]);
    }

    JCheckBox chckbx = new JCheckBox("Check here");
    chckbx.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (chckbx.isVisible()) {
                chckbx.setVisible(false);
            } else {
                chckbx.setVisible(true);
            }
        }
    });
    this.add(chckbx);

}
公共面板(JFrame父级){
这个.setBounds(0,0,0,0);
本.订单(新的空订单(5,5,5,5));
此.setLayout(null);
...     
//这是有效的
fstCB=newjcombobox(SomeEnum.values());
fstCB.setSelectedIndex(-1);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
//做点什么
}
}
});
fstCB.setEditable(真);
添加(fstCB);
//这是行不通的。
JComboBox sndCB=新的JComboBox();
sndCB.setSelectedIndex(-1);
sndCB.setVisible(假);
添加(sndCB);
列表rs=db.select(“从表1中选择smth”);
for(字符串[]r:rs){
sndCB.addItem(r[0]);
}
JCheckBox chckbx=新的JCheckBox(“检查这里”);
chckbx.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(chckbx.isVisible()){
chckbx.setVisible(假);
}否则{
chckbx.setVisible(真);
}
}
});
添加(chckbx);
}

提前感谢。

快速查看问题似乎来自设置索引时,而不是听众的使用情况

在您提供的代码中,您遇到问题的JComboBox在包含任何项之前设置索引。然后,当您从结果集中添加项目时,它将恢复为选择第一个项目的默认行为

我在下面添加了一个快速示例来强调这一点

enum SomeEnum{
        One, Two, Three;
    }

public static void main(String[] args){
    JFrame frame = new JFrame();
    JComboBox prePopulatedComboBox = new JComboBox(SomeEnum.values());
    prePopulatedComboBox.setSelectedIndex(-1);

    JComboBox postPopulatedComboBox = new JComboBox();
    postPopulatedComboBox.setSelectedIndex(-1);
    for(SomeEnum someEnum : SomeEnum.values()){
        postPopulatedComboBox.addItem(someEnum);
    }
    //Uncomment the below line to see the difference
    //postPopulatedComboBox.setSelectedIndex(-1);

    JPanel panel = new JPanel(new BorderLayout(5,5));
    panel.add(prePopulatedComboBox, BorderLayout.NORTH);
    panel.add(postPopulatedComboBox, BorderLayout.SOUTH);

    frame.add(panel);
    frame.setMinimumSize(new Dimension(250,250));
    frame.setVisible(true);
}
我的建议是尝试搬家:

sndCB.setSelectedIndex(-1);
到这里:

List<String[]> rs = db.select("SELECT smth FROM table", 1);
    for (String[] r : rs) {
        sndCB.addItem(r[0]);
    }
sndCB.setSelectedIndex(-1);
List rs=db.select(“从表中选择smth”,1);
for(字符串[]r:rs){
sndCB.addItem(r[0]);
}
sndCB.setSelectedIndex(-1);

希望这有帮助,如果没有,请用一个更完整的例子更新您的问题,以澄清Andrew建议的问题。

快速查看,问题似乎来自您设置索引时,而不是听众的使用情况

在您提供的代码中,您遇到问题的JComboBox在包含任何项之前设置索引。然后,当您从结果集中添加项目时,它将恢复为选择第一个项目的默认行为

我在下面添加了一个快速示例来强调这一点

enum SomeEnum{
        One, Two, Three;
    }

public static void main(String[] args){
    JFrame frame = new JFrame();
    JComboBox prePopulatedComboBox = new JComboBox(SomeEnum.values());
    prePopulatedComboBox.setSelectedIndex(-1);

    JComboBox postPopulatedComboBox = new JComboBox();
    postPopulatedComboBox.setSelectedIndex(-1);
    for(SomeEnum someEnum : SomeEnum.values()){
        postPopulatedComboBox.addItem(someEnum);
    }
    //Uncomment the below line to see the difference
    //postPopulatedComboBox.setSelectedIndex(-1);

    JPanel panel = new JPanel(new BorderLayout(5,5));
    panel.add(prePopulatedComboBox, BorderLayout.NORTH);
    panel.add(postPopulatedComboBox, BorderLayout.SOUTH);

    frame.add(panel);
    frame.setMinimumSize(new Dimension(250,250));
    frame.setVisible(true);
}
我的建议是尝试搬家:

sndCB.setSelectedIndex(-1);
到这里:

List<String[]> rs = db.select("SELECT smth FROM table", 1);
    for (String[] r : rs) {
        sndCB.addItem(r[0]);
    }
sndCB.setSelectedIndex(-1);
List rs=db.select(“从表中选择smth”,1);
for(字符串[]r:rs){
sndCB.addItem(r[0]);
}
sndCB.setSelectedIndex(-1);
希望这有帮助,如果没有,请用一个更完整的例子更新你的问题,以澄清安德鲁所建议的问题