Как работать с кнопкой закрытия в AWT Frame - PullRequest
0 голосов
/ 09 марта 2019

Я начинаю с некоторых базовых примеров Java2D, в частности, под AWT, после первых примеров книги «Введение в компьютерную графику Java2D / Java3D». Я написал следующие два класса, один из которых является «основным» классом:

package com.example.test;

public class Test {

    public static void main( String[] args ) {

            MyChart terminal = new MyChart();
            terminal.setTitle("The first Java 2D program");
            terminal.setSize(350,80);
            terminal.setVisible(true);

    }

}

И еще один, который расширяет AWT Frame:

package com.example.test;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyChart extends Frame {


        public void MyChart() {

            this.addWindowListener(new WindowAdapter(){  
                public void windowClosing(WindowEvent e) {  
                    dispose();  
                }  
            });

        }

        public void paint(Graphics g) {
            Graphics2D g2d =  (Graphics2D) g;
            g2d.drawString("Hello world!", 30, 50);
        };


}

Это создает ожидаемое окно "Hello World" на экране, но когда я нажимаю кнопку закрытия (Windows 10), ничего не происходит.Я пытаюсь выяснить, что я сделал не так, добавляя прослушиватель безуспешно.

Приветствуются любые советы или предложения, даже для дальнейшей отладки.

Я нахожусь под Java: 1.8.0_191 и Windows10 как упомянуто.

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Определение конструктора было неверным, void присутствовал и должен быть удален.

Исходный код (НЕПРАВИЛЬНЫЙ конструктор, использует void):

    public void MyChart() {

        this.addWindowListener(new WindowAdapter(){  
            public void windowClosing(WindowEvent e) {  
                dispose();  
            }  
        });

    }

Исправленный код (без void):

public MyChart() {

        this.addWindowListener(new WindowAdapter(){  
            public void windowClosing(WindowEvent e) {  
                dispose();  
            }  
        });

}
1 голос
/ 09 марта 2019

Вы не вызывали функцию MyChart в своем основном классе.код ниже работает нормально.

public class Test {

        public static void main( String[] args ) {
            System.out.println("Terminal Group");
            MyChart terminal = new MyChart();
            terminal.MyChart();//I added this.
            terminal.setTitle("The first Java 2D program");
            terminal.setSize(350,80);
            terminal.setVisible(true);
    }

}

public class MyChart extends Frame {
        public void MyChart() {
            this.addWindowListener(new WindowAdapter(){  
                public void windowClosing(WindowEvent e) {  
               dispose();
               }  
            });

        }

        public void paint(Graphics g) {
            Graphics2D g2d =  (Graphics2D) g;
            g2d.drawString("Hello world!", 30, 50);
        };
}
...