Почему моя программа ItemListener не позволяет мне выбирать опцию из двух разных JComboBox в Java?

1

Моя программа будет делать только один JcomboBox в то время, когда я пытаюсь объединить оба числа, чтобы отобразить окончательный номер. Это позволяет мне запускать программу, но она не отображает конечную цену, потому что она не хочет сразу выбирать две вещи.

Вот код для моей программы:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CottageRental2 extends JFrame implements ItemListener{
  // Declare all instance data  (primitives and objects used) 
  private int WIDTH = 676;
  private int HEIGHT = 321; 
  Container con; 
  private JLabel label1;
  private JLabel label2;
  private JLabel label3;
  JComboBox  cbox1;
  JComboBox cbox2;
  String [ ] roomChoice = {"1 Bedroom: $600","2 Bedroom: $800","3 Bedroom: $1000"};
 String [ ] activityChoice = {"Horse Back Riding: $60","Rafting: $40","Row Boat Rental: $50"};
  ImageIcon icon1 = new ImageIcon("C:\\Users\\Coding\\Desktop\\cottage.jpeg");
  Font f1 = new Font("Ariel", Font.BOLD, 30);

//constructor 
  public CottageRental2(){
    super("Cottage Rental"); 
    con = getContentPane(); 
    con.setLayout(new BorderLayout()); 
    con.setBackground(Color.GRAY);
    setSize(WIDTH, HEIGHT);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
}

  public void createGUI(){
    label1 = new JLabel("Woodberry Cottage Rental", JLabel.CENTER);
    label1.setFont(f1);
    label1.setForeground(Color.WHITE);
    label2 = new JLabel("Rental Amount Due: $660", JLabel.CENTER);
    label2.setFont(f1);
    label2.setForeground(Color.WHITE);
    label3 = new JLabel(icon1);
    cbox1 = new JComboBox();
    cbox1.addItem(roomChoice[0]);
    cbox1.addItem(roomChoice[1]);
    cbox1.addItem(roomChoice[2]);
    cbox1.addItemListener(this);
    cbox2 = new JComboBox();
    cbox2.addItem(activityChoice[0]);
    cbox2.addItem(activityChoice[1]);
    cbox2.addItem(activityChoice[2]);
    cbox2.addItemListener(this);
    con.add(label1, BorderLayout.NORTH);
    con.add(label2, BorderLayout.SOUTH);
    con.add(label3, BorderLayout.CENTER);
    con.add(cbox1, BorderLayout.WEST);
    con.add(cbox2, BorderLayout.EAST);
  }

  public void itemStateChanged(ItemEvent event){
    Object source = event.getSource();
    int price1 = 0;
    int price2 = 0;
    if(source == cbox1){
      int roomIndex = cbox1.getSelectedIndex();
      if(roomIndex == 0){
        price1 = 600;
      }
      if(roomIndex == 1){
        price1 = 800;
      }
      if(roomIndex == 2){
        price1 = 1000;
      }
    }
    if(source == cbox2){
      int activityIndex = cbox2.getSelectedIndex();
      if(activityIndex == 0){
        price2 = 60;
      }
      if(activityIndex == 1){
        price2 = 40;
      }
      if(activityIndex == 2){
        price2 = 50;
      }
    }
    label2.setText("Rental Amount Due: $" + (price1 + price2));
  }

  public static void main(String[] args){
    CottageRental2 object = new CottageRental2(); 
    object.createGUI();
    object.setSize(675, 320);
  }
}
Теги:
swing
jcombobox
itemlistener

1 ответ

3
Лучший ответ

Ваша проблема заключается в вашем if (source ==...) если блоки запрещают программе получать выделенный элемент из другого JComboBox, который не активно выбран.

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

public void itemStateChanged(ItemEvent event) {
  // Object source = event.getSource();
  int price1 = 0;
  int price2 = 0;
  // if(source == cbox1){
  int roomIndex = cbox1.getSelectedIndex();
  if (roomIndex == 0) {
     price1 = 600;
  } else if (roomIndex == 1) {
     price1 = 800;
  } else if (roomIndex == 2) {
     price1 = 1000;
  }
  // }
  // if(source == cbox2){
  int activityIndex = cbox2.getSelectedIndex();
  if (activityIndex == 0) {
     price2 = 60;
  } else if (activityIndex == 1) {
     price2 = 40;
  } else if (activityIndex == 2) {
     price2 = 50;
  }
  // }
  label2.setText("Rental Amount Due: $" + (price1 + price2));
}

Кроме того, было бы безопаснее, если вы используете некоторые else if блоки в ваших предложениях выбора элементов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню