Java - JFrame 关闭时如何打印消息?

标签 java swing jframe

我正在完成 Java 初学者类(class)的作业。我们这个学期才过半,这周刚刚了解了 JFrames。我们的作业要求我们为程序创建一个 GUI,以更改上周屏幕上的颜色,并要求我们向控制台打印一条消息,说明当用户退出 GUI 时 GUI 已关闭。我当前的代码在 GUI 打开时而不是关闭时打印此消息。 JFrame 的创建发生在名为 ColorChanger 的公共(public)类中,其中导入了 javax.swing.JFrame。

ColorChanger 类(位于用户提示颜色下的主底部):

JFrame application = new JFrame();
application.setLocation(250, 250);
application.setSize(400, 150);
application.setTitle("Color Changer");
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.setLocationRelativeTo(null);
ColorPanel panel = new ColorPanel(colorAmountRed, colorAmountGreen, colorAmountBlue);
application.add(panel);

application.setVisible(true);
System.out.println("The GUI has closed.");

面板的构造函数位于名为 ColorPanel 的类中:

import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

public class ColorPanel extends JPanel {
    private int red;    
    private int green;
    private int blue;

    public ColorPanel(int red, int green, int blue) {
        this.red = red;
        this.green = green;
        this.blue = blue;
        this.setBackground(new Color (this.red, this.green, this.blue));    
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);    // Calls parent paintComponent (JPanel itself)

        int fontSize = 26;  // Font Size sent as a parameter
        g.setFont(new Font("TimesRoman", Font.PLAIN, fontSize));

        int redContrast = 0;
        if (red >= 0 && red <= 123) {
            redContrast = 255;
        }

        int greenContrast = 0;
        if (green >= 0 && green <= 123) {
            greenContrast = 255;
        }

        int blueContrast = 0;
        if (blue >= 0 && blue <= 123) {
            blueContrast = 255;
        }
        this.setForeground(new Color (redContrast, greenContrast, blueContrast));
        g.drawString("Java GUI One", getWidth() / 2 - 75, getHeight() / 2 + 10 );

    }
}   

我相当确定 println 是可行的方法,但我不确定它需要去哪里才能在 GUI 关闭后出现。这是我第一次使用 Java(或 StackOverflow)。对任何格式问题等表示歉意。

最佳答案

用线

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

当框架关闭时,您告诉 Java 自行关闭。要在 GUI 关闭后打印消息,您不应在 GUI 关闭时关闭 Java:

application.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

然后添加一个“退出监听器”:

application.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        System.out.println("GUI has been closed");
        //THEN you can exit the program
        System.exit(0);
    }
});

关于Java - JFrame 关闭时如何打印消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60516720/

相关文章:

Java Swing JFrame 突然停止响应鼠标输入,但仍接受键盘输入

java - 如何让一个按钮打开一个新窗口并关闭旧窗口

java - JComboBox 不更新所选项目/内部类访问

java - 如何在Spring Gradle项目中将Lombok与JPA元模型一起使用?

java - for 循环将对象的某些字段添加到数组列表中

java - 如何将 JTextField 或 JButton 移至左侧

java - 不选择 JTable 中的行

java - 使用子类 SpinnerListModel 在 JSpinner 中键入数字

java - 如何在 JSP 页面中将 Int[] 数组复制或转换为 var

java - Java中的日期列表递增方法