Java - Как напечатать сообщение, когда JFrame закрыт? - PullRequest
0 голосов
/ 04 марта 2020

Я работаю над заданием для начинающего Java класса. Мы только в середине семестра и только что узнали о JFrames на этой неделе. Наше задание заставило нас создать GUI для программы, чтобы изменить цвета на экране с предыдущей недели, и попросить нас напечатать сообщение на консоли, сообщающее, что GUI закрылся, когда пользователь выходит из GUI. Мой текущий код печатает это сообщение как GUI, а не когда оно закрыто. Это создание JFrame происходит внутри класса c publi, называемого ColorChanger, куда импортируется 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 - это путь к go, но я не уверен, где он необходимо go, чтобы появиться ПОСЛЕ закрытия GUI. Я впервые работаю с Java (или StackOverflow, если на то пошло). Извинения за любые вопросы форматирования, et c.

1 Ответ

1 голос
/ 04 марта 2020

С помощью строки

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

вы указываете Java закрывать себя при закрытии рамки. Чтобы напечатать сообщение после закрытия GUI, не следует закрывать Java, когда закрывается GUI:

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);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...