ItemListener не меняет значение Java

Я сделал этот код, который должен изменить значение в 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);

            }
        }
    }
});

person coo12    schedule 20.08.2014    source источник
comment
Вы каждый раз создаете новый JLabel. Будет проще создать один JLable и установить для него setText().   -  person Andy Thomas    schedule 20.08.2014


Ответы (1)


Если в вашем компоненте уже есть JLabel, вам не нужно создавать его заново для каждого изменения состояния.

Переместите эту часть туда, где вы также добавляете свой comboBox:

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

Но с конструктором по умолчанию.

И вместо того, чтобы каждый раз добавлять новую метку, просто вызовите:

lblTesting.setText(accNo1);

При этом я предполагаю, что в вашем примере вы добавляете новую метку, но отображается только первая - в зависимости от вашего макета.

person NoDataFound    schedule 20.08.2014
comment
Когда я перемещаю эту часть, я говорю, что должен создать новую переменную. - person coo12; 20.08.2014
comment
Тогда не могли бы вы показать свой код в целом? Потому что, насколько я понимаю, comboBox является либо локальной переменной включающего метода, либо членом вмещающего экземпляра. Помещение lblTesting в этот момент не должно быть проблемой, если у вас уже нет lblTesting. И если это lblTesting уже является полем окружающего класса, просто добавьте его в его родительский контейнер. - person NoDataFound; 20.08.2014
comment
спасибо, проблема решена. Это произошло из-за неправильного объявления в ItemListener › String accNo1 = null;. - person coo12; 21.08.2014