繁体   English   中英

如何使用按钮关闭框架并打开新框架?

[英]How can I use Button to Close Frame and Open New Frame?

那是我的代码在这里。 我想要java.awt.Buttonjava.awt.Frame的答案。

有人可以帮我吗?

import java.awt.*;
import java.awt.event.*;

public class TestGUI extends Frame implements ActionListener, WindowListener{

    private Label lbl;
    private Label lbl1
    private Label lbl2;
    private Label lbl3;
    private TextField tf;
    private TextField tf1;
    private TextField tf2;
    private Button btn;
    private Button btn1;
    private Frame frame;

    public TestGUI() {
        setLayout(new FlowLayout());

        lbl = new Label("Hi Guys! That's My First GUI Program and is made by me too");
        add(lbl);

        lbl1 = new Label("Enter Your Name Please ~");
        add(lbl1);

        tf1 = new TextField(30);
        tf1.setEditable(true);
        add(tf1);

        lbl2 = new Label("Enter Your Age Please ~");
        add(lbl2);

        tf2 = new TextField(30);
        tf2.setEditable(true);
        add(tf2);

        lbl3 = new Label("Enter Your School/College Name Please ~");
        add(lbl3);

        tf = new TextField(28);
        tf.setEditable(true);
        add(tf);

        btn = new Button("Cancel");
        add(btn);

        btn.addActionListener(this);

        addWindowListener(this);

        setTitle("My own GUI");
        setSize(500, 300);

        setVisible(true);
    }

    public static void main(String[] args){
        TestGUI app = new TestGUI();
    }

    @Override
    public void actionPerformed(ActionEvent evt){

    }

    @Override
    public void windowClosing(WindowEvent evt){
        System.exit(0);
    }

    @Override public void windowDeactivated(WindowEvent evt){}

    @Override public void windowActivated(WindowEvent evt){}

    @Override public void windowOpened(WindowEvent evt){}

    @Override public void windowClosed(WindowEvent evt){}

    @Override public void windowIconified(WindowEvent evt){}

    @Override public void windowDeiconified(WindowEvent evt){}
}

提前致谢。

您只是使事情复杂化。 无需扩展框架和实现这些接口,只需扩展JFrame。

public class TestGUI extends JFrame{...}

在您的TestGUI框架中,创建另一个JFrame,例如otherFrame,并创建两个botton,分别表示“打开和关闭”,然后将ActionListener绑定到它们。

openBtn.addActionListener(new ActionListener(){
    otherFrame.setVisible(true);
});

closeBtn.addActionListener(new ActionListener(){
    otherFrame.setVisible(false);
});

setVisible()方法接受布尔值,这是您实际需要的。 更简单,更干净的代码。

对于您来说,使用JFrame而不是Frame可能更有意义(我建议您在此处阅读Kumar Vivek Mitra的答案以更好地了解原因)。 如果使用JFrame,则在关闭窗口时需要调用yourJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)来停止程序。

要响应您的按钮单击,只需将匿名类传递给您的按钮addOnClickListener()方法,如下所示:

btn.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {

                        //Do stuff here

                    }

                });

然后,您应该可以删除现有的actionPerformed()方法。

要打开一个新框架并关闭现有框架,您应该创建两个JFrame对象,而不是扩展Frame(或JFrame)。 然后,当您要打开第二个框架时,只需调用secondFrame.setVisable(true) ,并使用firstFrame.dispose关闭第一个firstFrame.dispose 但是,我先来看一下JDialogs和JOptionPanes ,看看它们是否可能对您更好。

完成所有这些之后,您应该可以删除所有WindowListener内容,因为那是稍有不同的内容。 (如果您有兴趣,请在这里看看)

最后,不要忘记在lbl1标签之后添加分号。 ;)

祝好运!

您可以使用ActionListener接口。 但是,除了上述几点,其他人发表了评论。 您可以通过在循环内添加for循环和setSize方法以及相应循环变量的高度宽度,来向帧中添加动画。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM