【问题标题】:I cannot close JFrame我无法关闭 JFrame
【发布时间】:2015-09-03 16:12:33
【问题描述】:

我有两种 java 形式:NewJFrame i NewJFrame1。我在 NewJFrame 上有按钮,所以当我单击该按钮打开 NewJFrame1 并关闭 NewJFrame 时。它可以打开 NewJFrame1,但不能关闭 NewJFrame。 这: NewJFrame 框架 = 新的 NewJframe(); frame.setVisible(false); 不起作用。此外, frame.dispose();不工作。有人帮我解决问题,我如何通过单击其中的按钮(NewJFrame)来关闭 NewJFrame。

【问题讨论】:

标签: java swing dispose


【解决方案1】:

在您的代码中

NewJFrame frame = new NewJFrame();

创建一个新的(第二个)NewJFrame 实例。如果要关闭原始实例,则需要对此实例的引用。根据您的代码,引用可能是this,所以

this.dispose();

可以工作。

【讨论】:

  • 如果这解决了您的问题,请通过将我的答案标记为已接受(和/或投票)来表明这一点。
【解决方案2】:

在您尝试关闭它之前检查框架是否可见...也许您正在尝试关闭错误的框架实例...如果您有 NewJFrame frame = new NewJframe() 那么同样的框架需要关闭。

frame.setVisible(false); 要么 frame.dispose();

只在原始实例上进行处置,不要在JFrame frame = new JFrame()twice 上执行。

【讨论】:

    【解决方案3】:

    试试这个。希望它会起作用。

           frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    

    【讨论】:

      【解决方案4】:

      我不确定你为什么要这样做,但我为你提供了一个工作示例:

      import java.awt.FlowLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      
      
      public class Tester implements ActionListener {
          private static final String SHOW = "show";
          private final JButton displayer = new JButton(SHOW);
          private final JButton hider = new JButton("hide");
          private final JFrame f;
          private final JFrame f1;
      
          Tester(){
              displayer.addActionListener(this);
              hider.addActionListener(this);
      
              f = new JFrame();
              f.setLayout(new FlowLayout());
              f.setSize(500, 500);
              f.add(displayer);
              f.add(hider);
              f.setVisible(true);
      
              f1 = new JFrame();
              f1.setSize(500, 500);
              f1.setLocationRelativeTo(null);
              f1.add(new JLabel("empty frame"));  
          }
      
          public static void main(String[] args) {
              new Tester();
          }
      
          @Override
          public void actionPerformed(ActionEvent arg0) {
                  f1.setVisible(arg0.getActionCommand().equals(SHOW));
          }
      }
      

      【讨论】:

      • 非常非常感谢您的帮助...我正在使用 DragAndDrop 所以我不知道如何使用这些侦听器..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多