(Java) Сложность в занятиях - PullRequest
1 голос
/ 09 марта 2012

enter image description here

На основании приведенной выше диаграммы; Я хотел бы, чтобы Frame1 показывал Frame2, используя New (Jbutton), и Frame3 показывал, используя Show (JButton). Frame3 имеет по умолчанию «Hello World» (JtextField), и я хотел бы сделать это пустым, используя Yes (JButton) из Frame2.

Проблема в том, что я не знаю код для Frame2 и как очистить текстовое поле от frame3.

Вот мой код:

Frame1.java

public class Frame1 extends JFrame implements ActionListener{

JButton b1 = new JButton("New");
JButton b2 = new JButton("Show");

Frame2 f2 = new Frame2();
Frame3 f3 = new Frame3();

public Frame1(){
    setLayout(new FlowLayout());
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,300);
    add(b1);
    add(b2);
    b1.addActionListener(this);
    b2.addActionListener(this);
}

public static void main(String args[]){
    new Frame1();
}

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==b1){
        f2.setVisible(true);
    }
    else{
        f3.setVisible(true);
    }
}
}

Frame2.java

public class Frame2 extends JFrame implements ActionListener{

JButton b1 = new JButton("Yes");
JButton b2 = new JButton("No");

public Frame2(){
    setLayout(new FlowLayout());
    setVisible(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,100);

    add(b1);
    add(b2);
}
public void actionPerformed(ActionEvent e) {
    if(e.getSource()==b1){

    }else{

    }
}
}

Frame3.java

public class Frame3 extends JFrame{

JTextField t1 = new JTextField("Hello WOrld");

public Frame3(){
    setLayout(new FlowLayout());
    setVisible(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(200,200);

    add(t1);

}

}

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Некоторые рекомендации:

  • Frame2 должен быть не JFrame, а скорее модальным JDialog, так как он зависит от Frame1 и должен предотвращать взаимодействие пользователя с Frame1, пока не будет обработан Frame2.Здесь отлично работает JOptionPane.
  • Frame1 должен получить результат от Frame2, а затем Frame1 будет использовать его, чтобы решить, создавать ли новый Frame3 (который также, вероятно, должен быть диалогом).
1 голос
/ 09 марта 2012

Вы можете просто передать ссылку на frame3 в конструкторе frame2, а затем, когда вы нажмете кнопку Yes, очистить JTextField вашего frame3.

EDIT

Хорошо, когда вы объявляете свои фреймы, вы могли бы создать свой frame3 и передать его конструктору frame2:

Frame3 f3 = new Frame3();
Frame2 f2 = new Frame2(f3);

и в вашем frame2

Frame refToFrame3;
...
public Frame2(Frame f){
   ...
   refToFrame3 = f;
   ...
...

public void actionPerformed(ActionEvent e) {
    if(e.getSource()==b1){
        refToFrame3.clearText()
        ...

а затем в вашем frame3 вы создаете метод clearText, который очищает текст в вашем JTextField.

...