在我的程序中,当一个按钮被点击时,我正在使用的JFrame应该会关闭。但是,dispose()方法似乎不起作用。有人能帮帮我吗?
public class SetUp extends JFrame implements ActionListener, Checker {
JFrame frame= new JFrame("Set Up");
public mmSetUp() {
setSize(500, 300);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);
pack();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == Submit) {
windowclose();
}
}
public void windowclose() {
frame.dispose();
}
}发布于 2014-07-10 08:28:02
好的,在检查你的代码之后,它可能是,可能是,因为你的类扩展了JFrame,你把所有的元素都添加到了这个扩展框架中。
但是你也创建了一个JFrame,这不是一个好的做法,首先请参阅The use of multiple JFrames, Good / Bad Practice关于使用多个框架。
现在回到您的代码中,让我们看看它,正如我前面所说的,您正在像这样在您的类上扩展一个JFrame (我将这个框架称为frame1)。
public class SetUp extends JFrame implements ActionListener, Checker {但是您也在这里创建了一个JFrame (我将引用frame2的这个框架):
JFrame frame= new JFrame("Set Up");您正在尝试dispose frame2,它实际上正在发生,但是如果您想要处理frame1 (它包含您所有的元素,即您正在使用的元素),那么在此方法上,您应该更改:
public void windowclose() {
frame.dispose();
}对于这一条:
public void windowclose() {
this.dispose();
}我也不建议你从JFrame类扩展,最好像你那样从它创建对象。
但如果您这样做,那么您应该按如下方式更改您的代码:
public mmSetUp() {
frame.setSize(500, 300);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.pack();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == Submit) {
windowclose();
}
}
public void windowclose() {
frame.dispose();
}我不能百分之百地确定它是否能工作或编译,因为我不在我的PC atm上,所以我不能创建一个完整的例子,但在第一视图中,这就是你的班级正在发生的事情。再过3个小时左右,我就可以发布一个可编译的例子了。
但是请检查一下
发布于 2014-07-10 08:40:58
您有2个JFrames。其一,它正在被扩展。两个,一个叫frame。
首先,你只犯了一个错误。
将windowclose()更改为:
public void windowclose() {
dispose(); // Removed frame part
}您所做的是,从开始和离开帧完全设置扩展JFrame,使其处于空闲状态。
当windowclose()被调用时,它会处理空闲帧,这个空闲帧基本上是无用的,因为除了标题之外,您甚至没有修改任何内容。
在更改了windowclose()之后,代码应该可以工作了,现在可以去掉
JFrame frame= new JFrame("Set Up");但是,如果你想保持一切整洁,按照Frakcool说的做,并删除扩展JFrame
发布于 2014-07-10 06:02:53
我认为您应该调用frame.setVisible( false )。
编辑:你的程序有几个逻辑错误。请尝试此版本:
public class WindowCloseTest
{
public static void main( String[] args )
{
new SetUp().mmSetUp();
}
}
class SetUp implements ActionListener {
JFrame frame= new JFrame("Set Up");
public void mmSetUp() {
frame.setSize(500, 300);
JButton b = new JButton( "Submit");
b.addActionListener(this);
frame.add( b, BorderLayout.SOUTH );
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
System.out.println( e );
if (e.getActionCommand() == "Submit") {
windowclose();
}
}
public void windowclose() {
frame.dispose();
}
}https://stackoverflow.com/questions/24664460
复制相似问题