为什么在调用setSelectedIndex(0)后不会自动触发itemListener?

时间:2013-11-23 12:39:18

标签: java swing jcombobox jdialog

最后调用

cbTexture.setSelectedIndex(0); 构造函数,但它没有帮助 自动选择子纹理 在它之后。为什么呢?

  public class TradeInDialog extends JDialog {

    public TradeInDialog(Database _db) throws SQLException
    {
        ....     
        setupTexture();

        cbTexture.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {

                if(e.getStateChange() == ItemEvent.SELECTED) {
                    selectedTexture = cbTexture.getSelectedIndex()+1;
                    setupSubTexture();
            }
        });
          ....      

         cbTexture.setSelectedIndex(0);
    }

2 个答案:

答案 0 :(得分:1)

你必须在事件处理程序类之外第一次调用setupSubTexture方法,所以你的代码必须是这样的:

公共类TradeInDialog扩展了JDialog {

public TradeInDialog(Database _db) throws SQLException
{
    selectedTexture = 1;
    setupSubTexture();
    setupTexture();

    cbTexture.addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e) {

            if(e.getStateChange() == ItemEvent.SELECTED) {
                selectedTexture = cbTexture.getSelectedIndex()+1;
                setupSubTexture();
        }
    });

    cbTexture.setSelectedIndex(0);
}

答案 1 :(得分:0)

默认情况下,您的第一个元素中的问题已被选中,因为当您调用setupSubTexture();时,不会执行cbTexture.setSelectedIndex(0);方法。试试cbTexture.setSelectedIndex(1);即可看到它有效。