gpt4 book ai didi

java - 如何关闭jframe面板或窗口

转载 作者:行者123 更新时间:2023-12-01 10:01:54 33 4
gpt4 key购买 nike

我有 2 个框架/窗口,窗口 2 上有“退出”按钮,我从窗口 1 启动窗口 2,然后退出它,即 setVisible(false);

当我执行窗口 2 时,我可以轻松地单击退出按钮并隐藏当前窗口,但是当我从窗口 1 启动窗口 2,然后单击退出按钮时,我收到 NullPointerException 错误。然后我一开始就用静态实例化了它,这个错误消失了,但是窗口 2 没有被关闭/隐藏,它仍然在那里,没有按钮的效果。

窗口 1 代码:

package com.my.jlms;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class LibrarianMenu extends JFrame {

private JPanel contentPane;
private static LibrarianMenu frame;


/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new LibrarianMenu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public LibrarianMenu() {
setTitle("Librarian");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 385, 230);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JButton btnPasswd = new JButton("Change Pass");
btnPasswd.setBounds(202, 76, 146, 39);
contentPane.add(btnPasswd);


btnPasswd.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
ChangePwd framee = new ChangePwd();
framee.setVisible(true);
}
});

}

}

窗口 2 代码:

package com.my.jlms;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import javax.swing.JButton;

public class ChangePwd extends JFrame {

private JPanel contentPane;
private static ChangePwd frame = new ChangePwd();;

private JButton btnExit;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new ChangePwd();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public ChangePwd() {
setResizable(false);
setTitle("Password!");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 266, 154);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

btnExit = new JButton("Exit");
btnExit.setBounds(20, 80, 89, 30);
contentPane.add(btnExit);


btnExit.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent ae) {
frame.setVisible(false);
}
});
}

}

有没有办法可以将窗口 2 设置为隐藏?

最佳答案

这里的问题是,您正在将框架创建为您的类,而不是在对象frame上创建,但是您隐藏了代表对象frame的框架。

更改此行(在 actionListener 的 actionPerformed() 方法中):

frame.setVisible(false);

至:

setVisible(false);

关于java - 如何关闭jframe面板或窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36744712/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com