(Java) Сложность в классах

введите здесь описание изображения

На основе диаграммы выше; Я хотел бы, чтобы Frame1 показывал Frame2 с помощью New (Jbutton) и Frame3 с использованием Show (JButton). Frame3 имеет это значение по умолчанию «Hello World» (JtextField), и я хотел бы сделать его пустым, используя кнопку «Да» (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);

}

}

person jcom    schedule 09.03.2012    source источник
comment
В чем вопрос? Что вы пробовали?   -  person unholysampler    schedule 09.03.2012
comment
Можете ли вы хотя бы заставить окна отображаться на экране для начала? Знаете ли вы, как добавлять обработчики (слушатели событий) к элементам управления? На веб-сайте Java по адресу docs.oracle.com/javase можно найти множество руководств, которые помогут вам начать работу. /учебник/uiswing   -  person JTeagle    schedule 09.03.2012


Ответы (2)


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

ИЗМЕНИТЬ

Что ж, когда вы объявляете свои фреймы, вы можете создать свой фрейм3 раньше и передать его конструктору фрейма2:

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

и в твоем кадре2

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

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

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

person talnicolas    schedule 09.03.2012
comment
вот образец. Но, как говорит Hovercraft, JDialogs может быть более подходящим в вашей ситуации. - person talnicolas; 09.03.2012
comment
большое спасибо, сэр.. почему я не знал этого с самого начала.. я такой тупой.. ха-ха - person jcom; 09.03.2012
comment
@jcom: вы также должны проголосовать за этот ответ, а также принять его. :) - person Hovercraft Full Of Eels; 09.03.2012

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

  • Frame2 должен быть не JFrame, а скорее модальным JDialog, поскольку он зависит от Frame1 и должен предотвращать взаимодействие пользователя с Frame1 до тех пор, пока не будет обработан Frame2. JOptionPane отлично подойдет здесь.
  • Frame1 должен получить результат от Frame2, а затем Frame1 будет использовать его, чтобы решить, создавать ли новый Frame3 (который также, вероятно, должен быть диалоговым окном).
person Hovercraft Full Of Eels    schedule 09.03.2012
comment
в моей программе, сэр, я использовал панели и поместил их в один фрейм, поэтому я сделал фрейм2 фреймом, а не диалогом. но я никогда не думал, что ваш способ ответить на эту проблему .. это также большая помощь .. спасибо, сэр ... - person jcom; 09.03.2012
comment
@jcom: Я согласен с тем, что вы делаете JPanels, поскольку это делает ваш код намного более гибким и фактически упрощает размещение вашей JPanel либо в JOptionPane, либо в модальном JDialog. Еще раз попробуйте, и вы увидите, насколько это просто. - person Hovercraft Full Of Eels; 09.03.2012