Расширение переменной области от одного кадра до другого кадра - PullRequest
0 голосов
/ 13 октября 2019

У меня есть два JFrame окна: SeatLayout и BillSummary. Мне нужно получить seatnumber из кадра SeatLayout и отобразить его в BillSummary, но область действия переменной ограничена первым кадром.

Как я могу это сделать?

1 Ответ

0 голосов
/ 14 октября 2019

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

Чтобы ответить на ваш вопрос, как передать переменную от вашего родителя (JFrame) ребенку (JDialog). Это может достигнутьиспользуя JDialog.

Я собираюсь пробежаться по примеру. допустим, ваш BillSummary.java это ....

//BillSummary Class
public class billSummary {
   JFrame frame;
   billSummary(JFrame frame) {
    this.frame = frame;
}

  public void launchbillSummary(int seatNumber) {
    // Create a dialog that suits your ui , you can use JPanel as your layout container
    JDialog dialog = new JDialog(frame, "Bill Summary", true);
    dialog.setLayout(new BorderLayout());
    dialog.setSize(100, 100);
    dialog.add(new JLabel(Integer.toString(seatNumber)), BorderLayout.CENTER);
    dialog.setVisible(true);
  }

}

Your seatLayout.java

public class seatLayout {

 seatLayout(){  
    //Lets say you have seleted seat number 10
    int defaultSeatNumber = 10;

    //Lets say you have a button and when it is clicked , you pass the data to billsummary page
    JButton enter = new JButton("Enter");

    //Your seatLayout GUI
    JFrame frame = new JFrame("seat layout");
    frame.setSize(300,300);
    frame.add(enter);

    enter.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            //Do your passing of data/ price of calculation here
            //You pass the data that to your custom dialog -> Bill summary 
            new billSummary(frame).launchbillSummary(defaultSeatNumber);
        }
    });
    frame.setVisible(true);
}


public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new seatLayout();
        }
    });
  }
}

Я надеюсь, что эта помощь и ответит на ваш вопрос. Удачи:)

...