(Java)课程难度大

时间:2012-03-09 14:07:41

标签: java swing jframe jdialog

enter image description here

基于上图;我希望Frame1使用New(Jbutton)显示Frame2,使用Show(JButton)显示Frame3。 Frame3有这个默认的“Hello World”(JtextField),我想使用Frame2中的Yes(JButton)将其设置为空。

问题是我不知道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 个答案:

答案 0 :(得分:1)

您只需在frame2构造函数中传递对frame3的引用,然后在单击Yes按钮时清除frame3的JTextField

修改

当您声明帧时,您可以先创建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中的文本。

答案 1 :(得分:1)

一些建议:

  • Frame2不应该是JFrame而是模态JDialog,因为它依赖于Frame1,并且应该阻止用户与Frame1交互,直到处理完Frame2。一个JOptionPane在这里工作得很好。
  • Frame1应该从Frame2获得结果,然后Frame1将使用它来决定是否创建一个新的Frame3(也可能应该是一个对话框)。