关闭当前窗口并打开上一个窗口?

时间:2014-06-08 15:48:03

标签: java swing jframe

我是java的初学者并坚持以下问题。 目的是在按下注销按钮时显示登录窗口。

显示的第一个JFrame窗口是“Plain”,有2个字段的用户名和密码(我稍后会添加登录功能)

当我按下提交按钮时,JFrame“NEw Window”会显示“LOGOUT”按钮

我想要做的是当按下“LOGOUT”时,“NEw Window”应该关闭,“Plain”窗口应该打开。

当前问题:当按下“LOGOUT”按钮时,“NEw Window”正在打开。

请更正代码,以便获得所需的功能

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

class Test implements ActionListener{
    JButton submit;
    JFrame j;
    JFrame jf;

    public Test()
    {
    j = new JFrame("PLAIN");
    j.setBounds(500,150,300,400);
    j.setVisible(true);
    j.setDefaultCloseOperation(j.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    j.add(panel);
    panel.setSize(50, 50);
    panel.setLayout(null);

    JLabel label = new JLabel("User Name");
    label.setSize(10,10);
    label.setBounds(100, 30, 400, 30);
    panel.add(label);

    JTextField username = new JTextField(10);
    username.setSize(10,10);
    username.setBounds(300, 30, 400, 30);
    panel.add(username);

    JLabel password= new JLabel("Password");
    password.setBounds(100, 90, 400, 30);
    panel.add(password);

    JPasswordField pass = new JPasswordField(10);
    pass.setBounds(300, 90, 400, 30);
    panel.add(pass);

    submit = new JButton("Submit");
    submit.setSize(10, 10);
    submit.setBounds(300, 160, 200, 40);
    panel.add(submit);

    submit.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        j.setVisible(false);
        jf = new JFrame("NEw Window");
        jf.setVisible(true);
        jf.setBounds(500,150,300,400);
        JPanel panel2 = new JPanel();
        panel2.setLayout(null);
        jf.add(panel2);

        JButton logout = new JButton("LOGOUT");
        logout.setBounds(100, 30, 400, 30);
        panel2.add(logout);
        logout.addActionListener(this);
        jf.setDefaultCloseOperation(j.EXIT_ON_CLOSE);

    }

    public void actionPerformed1(ActionEvent e1) {

        jf.dispose();
        j.setVisible(true);


    }

public static void main(String args[])
{

    new Test();

}

}

2 个答案:

答案 0 :(得分:1)

一些要点:

  1. 在添加所有组件后,最后调用JFrame#setVisible()

  2. 根本不要使用null布局,而是使用正确的布局管理器。

    阅读更多A Visual Guide to Layout Managers,其中详细描述了所有布局管理器以及示例代码。

  3. 使用SwingUtilities.invokeLater()确保EDT已正确初始化。

    了解更多

  4. 尝试使用WindowConstants.DISPOSE_ON_CLOSE代替JFrame.EXIT_ON_CLOSE

答案 1 :(得分:0)

在添加完所有组件之后,最后将Test()中的j.setVisible(true)放入。

如果你想制作一个新的表格,不要在已有的表格中进行,因为它不对。 阅读名为Clean code的书。您的代码中也有一些错误并且没用。