Помощь в автоматическом изменении значения при ItemChange в JComboBox - PullRequest
3 голосов
/ 07 августа 2011

У меня есть программа, в которой я использую 3 вещи, флажок, поле со списком и текстовое поле.Логика работает следующим образом, если флажок включен, тогда выпадающий список и текстовое поле включены, если нет.

Затем задайте некоторое значение в текстовом поле, умножив его на элемент в выпадающем списке.1006 *

Из фрейма - конечная цена равна цене * Количество.

Теперь проблема, когда я нажимаю "Купить", прошла нормально.Но когда я изменяю значение с Jcombobox, оно не изменяет автоматически окончательную цену и остается равным 1200, как в первом случае.Для изменения значения я сниму флажок и затем установите флажок.

В чем может быть проблема.Я использовал ItemListner как для флажка, так и для выпадающего списка.

@Override
public void itemStateChanged(ItemEvent e){

    Object get = e.getSource();

    int multiplier;
    int ftotal;


    if (e.getStateChange()==ItemEvent.SELECTED){
        if(get==chkbox1){
             qntbox1.setEnabled(true);            
             size1.setEnabled(true);
             multiplier = Integer.parseInt(String.valueOf(qntbox1.getSelectedItem()));


             ftotal = Integer.parseInt(price1.getText()) * multiplier;
             fprice1.setText(String.valueOf(ftotal));}

Ответы [ 3 ]

4 голосов
/ 07 августа 2011

Вы должны реализовать ActionListener для вашего JComboBox:

private static final String command_cbo1 = "ComboBox1";
// ...

public class YourClass implements ItemListener, ActionListener
{
    // ...

    public YourClass()
    {
        // ...
        qntbox1.addActionListener(this);
        qntbox1.setActionCommand(command_cbo1);
        // ...
    }

    // ...

    public void itemStateChanged(ItemEvent e)        
    {
        // ...
    }

    // ...

    public void actionPerformed(ActionEvent e)
    {
        JComboBox cb = (JComboBox) e.getSource();
        String s = (String) cb.getSelectedItem();

        if(e.getActionCommand().equals(command_cbo1))
        {
            fprice1.setText("" + (Integer.parseInt(price1.getText()) * Integer.parseInt(s)));
        }
        // ...
    }

    // ...
}
1 голос
/ 07 августа 2011

не прямо к вашему вопросу

1 / JCheckBox абсолютно бесполезен, который действительно понадобится для окончательного расчета (ей)

2 / считайте, что JComponents для Price и Final Price будет только JFormattedTextField , тогда вы можете довольно просто забыть о Parse#Whatever

3 / считать, что JComponents для Quantity будет только JSpinner , но обходной путь для числового экземпляра будет немного сложнее, как для JFormattedTextField примера здесь

4 / для хорошего вывода поместите все в JTable

5 / для JComboBox Я предпочел ItemListener не ActionListener , потому что ваши проблемы не с правильным Listener но с разбором Numbers правильный путь

0 голосов
/ 07 августа 2011

Хорошо, все заработало.ActionListner заставил его работать (JComboBox).Я полагаю, что использование ItemListner для слишком большого числа компонентов немного сбивает с толку, добавляя к этому, что я использовал слишком много предложений в области действия ItemListner.Большое спасибо всем за помощь.

@ mKorbel: Я буду использовать ваше предложение как можно скорее :) и проверим JTable и упомянутые компоненты.надо пройти через них, так как я им не пользовался.

@Eng.Fouad: Спасибо, мужчина, за помощь.

Только один вопрос.Когда я приведу тип getSelectedItem () к целому числу, он выдаст ошибку NumberFormatException (время выполнения).Поэтому я должен сначала изменить объект на строку, а затем разобрать в целое число.Любая подсказка, почему прямое преобразование вызывает ошибку?

Вот рабочий код проекта.

public void itemStateChanged(ItemEvent e){

    Object get = e.getSource();



    if (e.getStateChange()==ItemEvent.SELECTED){
        if(get==chkbox1){
             qntbox1.setEnabled(true);            
             size1.setEnabled(true);   
             fprice1.setText(String.valueOf(Integer.parseInt(price1.getText()) * Integer.parseInt(String.valueOf(qntbox1.getSelectedItem()))));
        }
  @Override
       public void actionPerformed (ActionEvent ae)
       {

          Object toggel = ae.getSource();      
          String check;

          if (toggel == qntbox1)
          {
            check = (String) qntbox1.getSelectedItem();
            fprice1.setText(String.valueOf(Integer.parseInt(price1.getText()) * Integer.parseInt(check)));

          }
...