退出按钮java

退出按钮java,java,swing,user-interface,intellij-idea,Java,Swing,User Interface,Intellij Idea,我正在IntelliJ上构建一个Java GUI,并制作一个“退出”按钮——目前正在使用 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class gui extends JFrame { priv

我正在IntelliJ上构建一个Java GUI,并制作一个“退出”按钮——目前正在使用

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;


public class gui extends JFrame {
    private JPanel mainPanel;

    private JButton exitButton;

    public gui(String title) {
        super(title);

        exitButton = new JButton("Exit");
        exitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(mainPanel);
        this.pack();
    }
    public static void main(String[] args) {
        JFrame frame = new gui("Emro GUI");
        frame.setVisible(true);
    }
}

代码在运行,我在youtube上遵循了一个确切的教程,但是退出按钮不起作用,我不确定为什么。我应该在新类或函数中使用exit按钮吗

在适当的位置添加以下三行将使其工作正常

import javax.swing.*;
        mainPanel = new JPanel();
        mainPanel.add(exitButton);
然而:

  • Swing应该始终从AWT事件调度线程(EDT)使用(使用
    java.AWT.EventQueue.invokeLater
  • 无需扩展
    JFrame
  • 不需要将
    mainPanel
    exitButton
    作为字段而不是本地字段
  • ActionListener
    使用lambda表达式

在适当的位置添加以下三行将使其正常工作

import javax.swing.*;
        mainPanel = new JPanel();
        mainPanel.add(exitButton);
然而:

  • Swing应该始终从AWT事件调度线程(EDT)使用(使用
    java.AWT.EventQueue.invokeLater
  • 无需扩展
    JFrame
  • 不需要将
    mainPanel
    exitButton
    作为字段而不是本地字段
  • ActionListener
    使用lambda表达式

您是否在action listeners方法中尝试过这一点:


WindowEvent closeWindowEvent=newwindowevent(frame,WindowEvent.WINDOW\u CLOSING);frame.dispatchEvent(closeWindowEvent);

您是否在操作侦听器方法中尝试过此方法:


WindowEvent closeWindowEvent=newwindowevent(frame,WindowEvent.WINDOW\u CLOSING);frame.dispatchEvent(closeWindowEvent)

如果您在IntelliJ IDEA中使用GUI设计器并将表单按钮绑定到类字段,则无需在代码中再次初始化按钮,因此应删除这一行:
exitButton=new JButton(“Exit”);
“但Exit按钮不起作用”那么当前的行为是什么呢?您也不需要
扩展JFrame
部分,因为您没有覆盖它的行为。请遵循(
FirstWordUpperCaseClass
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
所有单词大写字母常量
)。如果您在IntelliJ IDEA中使用GUI设计器并将表单按钮绑定到类字段,则无需在代码中再次初始化按钮,因此应删除这一行:
exitButton=new JButton(“Exit”);
“但Exit按钮不起作用”那么当前的行为是什么呢?您也不需要
扩展JFrame
部分,因为您没有覆盖它的行为。请遵循(
FirstWordUpperCaseClass
firstWordLowerCaseVariable
firstWordLowerCaseMethod()
所有单词大写字母常量
)。“mainPanel和exitButton不需要是字段而不是本地字段"。当使用IntelliJ IDEA GUI designer为用户生成初始化这些字段的代码时,情况并非如此。问题表明使用了GUI designer,请参阅我的评论以了解问题的可能原因。@CrazyCoder尽管您可能无法对此做任何事,但这些都是有效的观点,我建议您不要使用GUI设计师随着您对代码的了解和控制能力的提高,无法相信设计师会生成这样的狗屎代码,但无论哪种方式,都不需要向下投票,所有这些都是需要记住的有效点。+1“不需要将mainPanel和exitButton作为字段而不是本地字段”。当使用IntelliJ IDEA GUI designer为用户生成初始化这些字段的代码时,情况并非如此。问题表明使用了GUI designer,请参阅我的评论以了解问题的可能原因。@CrazyCoder尽管您可能无法对此做任何事,但这些都是有效的观点,我建议您不要使用GUI设计师随着您了解更多信息并更好地控制您的代码,不敢相信设计师会生成这样的狗屎代码,但无论如何都不需要否决,所有这些都是需要记住的有效点。+1从未意识到这个问题太老了从未意识到这个问题太老了