【问题标题】:Close the current window and open the previous window?关闭当前窗口并打开上一个窗口?
【发布时间】:2014-06-08 15:48:03
【问题描述】:

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

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

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

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

当前问题:当按下“注销”按钮时,“新窗口”正在打开。

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

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();

}

}

【问题讨论】:

标签: java swing jframe


【解决方案1】:

几点:

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

  2. 永远不要使用null 布局,而是使用适当的布局管理器。

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

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

    阅读全文

尝试使用WindowConstants.DISPOSE_ON_CLOSE 而不是JFrame.EXIT_ON_CLOSE

【讨论】:

    【解决方案2】:

    添加所有组件后,只需将 Test() 中的 j.setVisible(true) 放在最后即可。

    如果你想制作一个新的表格,不要在你已经有表格的同一个班级里做,因为它是不正确的。 阅读名为 Clean code 的书。您的代码中也有一些错误且无用。

    【讨论】:

    • 正如我在上面所说的,我是 Java 的初学者,而不是专家。所以请不要称我的代码无用。请记住,任何事情的专家都曾是初学者。
    • 嘿,我m sorry if I offended you, that was not the idea. I said that you wrote some useless code, its 只是一个观察。你必须从这种观察中学习。显然,一开始没有人是专家。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多