基本上,我想做的是用同一个班级的按钮关闭JFrame
。我有2个课程Class1
和Class2
。当我点击Class1
中的“添加数据”按钮时,它会打开Class2
(有点像对话框),当我点击“完成”时我想关闭Class2
“按钮。
-------------------------------的Class1 --------------- ----------------
public class Class1 extends JFrame{
private JPanel contentPane;
public Class1(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 355, 251);
contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setForeground(Color.BLACK);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//Add labels and other relevant content here
JButton addData = new JButton("Add Data");
addData.setBounds(32, 135, 130, 23);
contentPane.add(addData);
addData.addActionListener(new addDataActionListener());
}
class addDataActionListener implements ActionListener{
public void actionPerformed(ActionEvent arg5) {
Class2 co = new Class2();
co.setVisible(true);
//opening the Class2 JFrame
}
}
}
-------------------------------的Class2 --------------- ----------------
public class Class2 extends JFrame {
private JPanel contentPane;
public Class2(){
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setBounds(100, 100, 415, 238);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//Add labels and other relevant content here
JButton done = new JButton("Done");
done.setBounds(206, 164, 89, 23);
contentPane.add(done);
done.addActionListener(new doneActionListener());
}
class doneActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//add stuff that needs to be done
Class2 co2 = new Class2();
co2.setVisible(false);
co2.dispose();
}
但是,当我单击“完成”按钮时,它会执行所有其他操作,但不会关闭Class2中的帧。 如果有人能让我知道它是如何完成的,将不胜感激。
聚苯乙烯。我是Java新手(大约4个月前开始)。对不起,如果我不够清楚。在此先感谢:)
答案 0 :(得分:3)
你的doneActionListener
做错了。
您的代码实际上正在创建新的Class2
实例并关闭它,而不是关闭当前打开的实例。
试试这个:
class doneActionListener implements ActionListener{
private JFrame toBeClose;
public doneActionListener(JFrame toBeClose) {
this.toBeClose = toBeClose;
}
public void actionPerformed(ActionEvent e) {
toBeClose.setVisible(false);
toBeClose.dispose();
}
}
和
public Class2(){
// other code
// pass this to doneActionListener to be close
done.addActionListener(new doneActionListener(this));
}
答案 1 :(得分:2)
我不明白在doneActionListener中需要co2。我相信你可以通过将最后一行改为:
来解决这个问题 this.setVisible(false);
this.dispose();
但是,我没有测试它。如果解决方案有效,请告诉我。
答案 2 :(得分:2)
不扩展JFrame
,您必须创建局部变量,否则您无法在Object
hierachry
JComponents
的引用/ LI>
隐藏JFrame
,您必须JFrame#setDefaultCloseOperation(HIDE_ON_CLOSE)
或致电JButtons ActionListener
代码JFrame#setVisible(false)
答案 3 :(得分:0)
* 在doneActionListener中尝试这些更改 *
class doneActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//add stuff that needs to be done
SetVisible(false); //since its already extending the JFrame
}
或只是使用.... System.exit(0);
答案 4 :(得分:0)
我实际上是在搜索相同的答案,并发现在您ActionListener
对应的JButton
中应插入
this.setVisible(false);
this.dispose();
只是终止并隐藏当前JFrame
,而父JFrame
将继续这样,而整个程序终止包括
System.exit(0);
这将使所有JFrame
的消失