首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dispose()的问题;

dispose()的问题;
EN

Stack Overflow用户
提问于 2014-07-10 06:00:38
回答 4查看 136关注 0票数 0

在我的程序中,当一个按钮被点击时,我正在使用的JFrame应该会关闭。但是,dispose()方法似乎不起作用。有人能帮帮我吗?

代码语言:javascript
复制
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();
    }
}
EN

回答 4

Stack Overflow用户

发布于 2014-07-10 08:28:02

好的,在检查你的代码之后,它可能是,可能是,因为你的类扩展了JFrame,你把所有的元素都添加到了这个扩展框架中。

但是你也创建了一个JFrame,这不是一个好的做法,首先请参阅The use of multiple JFrames, Good / Bad Practice关于使用多个框架。

现在回到您的代码中,让我们看看它,正如我前面所说的,您正在像这样在您的类上扩展一个JFrame (我将这个框架称为frame1)。

代码语言:javascript
复制
public class SetUp extends JFrame implements ActionListener, Checker {

但是您也在这里创建了一个JFrame (我将引用frame2的这个框架):

代码语言:javascript
复制
JFrame frame= new JFrame("Set Up");

您正在尝试dispose frame2,它实际上正在发生,但是如果您想要处理frame1 (它包含您所有的元素,即您正在使用的元素),那么在此方法上,您应该更改:

代码语言:javascript
复制
public void windowclose() {
    frame.dispose();
}

对于这一条:

代码语言:javascript
复制
public void windowclose() {

    this.dispose();
}

我也不建议你从JFrame类扩展,最好像你那样从它创建对象。

但如果您这样做,那么您应该按如下方式更改您的代码:

代码语言:javascript
复制
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个小时左右,我就可以发布一个可编译的例子了。

但是请检查一下

票数 2
EN

Stack Overflow用户

发布于 2014-07-10 08:40:58

您有2个JFrames。其一,它正在被扩展。两个,一个叫frame。

首先,你只犯了一个错误。

将windowclose()更改为:

代码语言:javascript
复制
public void windowclose() {
    dispose(); // Removed frame part
}

您所做的是,从开始和离开帧完全设置扩展JFrame,使其处于空闲状态。

当windowclose()被调用时,它会处理空闲帧,这个空闲帧基本上是无用的,因为除了标题之外,您甚至没有修改任何内容。

在更改了windowclose()之后,代码应该可以工作了,现在可以去掉

代码语言:javascript
复制
JFrame frame= new JFrame("Set Up");

但是,如果你想保持一切整洁,按照Frakcool说的做,并删除扩展JFrame

票数 2
EN

Stack Overflow用户

发布于 2014-07-10 06:02:53

我认为您应该调用frame.setVisible( false )

编辑:你的程序有几个逻辑错误。请尝试此版本:

代码语言:javascript
复制
  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();
      }

  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24664460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档