ItemListener不会更改值Java

时间:2014-08-20 13:01:23

标签: java swing jlabel jcombobox itemlistener

我创建了这个代码,它应该在从组合框中选择一个项目后更改JLabel中的值。当我运行应用程序时,它出现在JLabel中但是当我在组合框中选择其他值时,JLabel中的值不会改变。有谁知道问题出在哪里?

comboBox = new JComboBox<String>();
    comboBox.setBounds(172, 50, 106, 22);
    frmAccountPayable.getContentPane().add(comboBox);

    comboBox.addItemListener(new ItemListener(){

    public void itemStateChanged(ItemEvent event) { 
        if (event.getStateChange() == ItemEvent.SELECTED) {
            Object item = event.getItem();
            String expenseCode = item.toString();

            try {
                String sql2 = "SELECT `Account No`, `Expense Code` FROM `database`.`expense_code_master` " + 
                        "WHERE `Expense Code` = '" + expenseCode + "'";
                PreparedStatement pst2 = conn.prepareStatement(sql2);
                ResultSet rs = pst2.executeQuery();
                String accNo1 = null;
                while (rs.next()){
                    accNo1 = rs.getString("Account No");
                }

                lblTesting = new JLabel(accNo1);
                lblTesting.setBounds(496, 49, 106, 22);
                frmAccountPayable.getContentPane().add(lblTesting);

            }catch (Exception ex) {
                System.out.println("Error: "+ex);

            }
        }
    }
});

1 个答案:

答案 0 :(得分:3)

如果组件中已有JLabel,则无需为每个状态更改重新创建一个。

将该部分移至您还添加comboBox的位置:

lblTesting = new JLabel(accNo1);
lblTesting.setBounds(496, 49, 106, 22);
frmAccountPayable.getContentPane().add(lblTesting);

但是使用默认构造函数。

而不是每次都添加新标签,只需致电:

lblTesting.setText(accNo1);

话虽如此,我想在你的例子中你添加了新标签,但只显示了第一个 - 取决于你的布局。