【问题标题】:Closing JFrame with button click [duplicate]单击按钮关闭 JFrame [重复]
【发布时间】:2011-01-22 02:28:36
【问题描述】:

我有 JFrame 的 jButton1 私有成员,我想在单击按钮时关闭框架。

jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
    }
});

我想做super.close(),但找不到超级的关闭。有没有办法引用JFrame

【问题讨论】:

    标签: java swing


    【解决方案1】:

    您需要对要关闭的特定框架的引用,但假设您有引用 dispose() 应该关闭该框架。

    jButton1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
           frameToClose.dispose();
        }
    });
    

    【讨论】:

    • 虽然这是真的,但是当你这样做时,你会跳过所有与关闭事件相关的 EventListeners...
    • 如何处理这个(当前)JFrame???
    • 如果我只想关闭框架而不是终止事件怎么办?
    【解决方案2】:
    JButton b3 = new JButton("CLOSE");
    
    b3.setBounds(50, 375, 250, 50);
    
    b3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    });
    

    【讨论】:

    • 非常适合单窗口应用程序,但是如果您使用它来关闭单个窗口,它也会关闭所有其他窗口...
    • @acp 我只想关闭同一个类而不是 java swing 中的前一个类
    • System.exit(0);方法正在工作..还有 dispose();方法也不错。
    • 我不认为使用 System::exit 是个好主意,因为调用 System.exit() 会关闭整个 JVM。
    【解决方案3】:

    在我看来,您有两个问题。一个是JFrame没有close方法,其他答案中已经解决了。

    另一个是您在引用 JFrame 时遇到问题。在actionPerformed 中,super 指的是 ActionListener。要在此处引用 JFrame 实例,请改用 MyExtendedJFrame.super(您也应该能够使用 MyExtendedJFrame.this,因为我认为您没有理由要覆盖 disposesetVisible 的行为)。

    【讨论】:

      【解决方案4】:

      你可以使用 super.dispose() 方法,它更类似于关闭操作。

      【讨论】:

      • 感谢您提供帮助 :-) 不幸的是,您的回答并没有增加太多有用,甚至是错误的(听众的超级没有处置,无需调用框架的超级,有关完整详细信息,请参阅@lins314159)
      【解决方案5】:

      你猫使用JFrame的setVisible ()方法(并将可见性设置为false)或dispose ()方法,它更类似于close操作。

      【讨论】:

      • setVisible() 方法对我不起作用。我还认为我可以通过设置可见性 = false 来关闭应用程序...我使用了 System.out(0);方法。它有效.. dispose() 方法也有效。
      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 2022-01-18
      • 2016-03-23
      • 2012-02-23
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多