java - 无法正确定义处理程序方法来关闭主程序框架和对话框弹出窗口

标签 java user-interface awt

说实话,我刚刚学习 Java 上的 GUI,目前只学习 AWT,还没有学习 SWING。我似乎不太了解如何使用监听器或容器,并且我设法在按 X 按钮时关闭主程序框架窗口,但我无法为弹出的对话框错误消息实现相同的效果。这是我的代码:

import java.awt.*;
import java.awt.Dialog.*;
import java.awt.event.*;

@SuppressWarnings("serial")

public class AWTAccum extends Frame implements KeyListener {

    private Label lbl1;
    private Label lbl2;
    private TextField tf1;
    private TextField tf2;
    private int sum = 0;
    private Dialog pop;

    public AWTAccum() {

        setTitle("AWT Accumulator");
        setSize(300, 150);
        setLayout(new FlowLayout());
        setResizable(true);
        setVisible(true);

        lbl1 = new Label("Enter an integer");
        lbl2 = new Label("Accumulated sum is");
        tf1 = new TextField("", 10);
        tf2 = new TextField("0", 10);

        tf1.setEditable(true);
        tf2.setEditable(false);

        add(lbl1);
        add(tf1);
        add(lbl2);
        add(tf2);

        tf1.addKeyListener(this);

        pop = new Dialog(this, "Error", ModalityType.APPLICATION_MODAL);
        Label msg = new Label("You can enter integers only.");
        pop.setSize(200, 100);
        pop.setVisible(false);
        pop.setLayout(new FlowLayout());
        pop.add(msg);
        pop.setResizable(false);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent w) {
                if (w.getWindow().equals(this)) {
                    dispose();
                    System.exit(1);
                } else if (w.getWindow().equals(pop)) {
                    pop.dispose();
                }
            }
        });

    }

    public static void main(String[] args) {

        new AWTAccum();

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            try {

                sum = sum + Integer.parseInt(tf1.getText());
                tf1.setText("");
                tf2.setText(Integer.toString(sum));

            } catch (Exception ex) {

                pop.setVisible(true);

            }

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
    }

}

强烈感谢帮助。另外,如果有人愿意,请向我解释为什么对话框需要一个所有者框架,以及它是否需要成为主类框架,或者如果我创建另一个框架类,那不是就像另一个窗口中的窗口一样吗?对话框让我很困惑,因为我以为我可以创建它的一个实例,但它会向我显示错误,除非它是在框架类型类中创建的。我认为它本身就是一个顶级容器。

最佳答案

我通常使用 swing,所以我可能是错的。但我认为你需要将弹出窗口设置为可聚焦,然后向弹出窗口添加一个关键监听器。

pop.setFocusable(true);
this.addKeyListener(pop);

而且你真的应该学习 swing 而不是 awt,awt 真的已经过时了。

关于java - 无法正确定义处理程序方法来关闭主程序框架和对话框弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60123177/

相关文章:

java - 我的正则表达式没有按我的预期工作

java - Guava 缓存 : cacheloader vs get(k, 可调用)

java - 回复kafka模板连接 header (CorrelationId)未发送到Google pub sub

user-interface - 统一更改下拉菜单的大小

java - 为什么我不能在我的 JPanel 上绘画?

java - 使用其图形在另一个内部绘制控件

java - JSoup 与祖先子运算符一起执行选择的问题

java - Netbeans 7.0.1 行为很奇怪,甚至无法在设计模式下编辑 GUI

Java GUI 不会显示我想要的提示

java - Container 类中 Paint(Graphics g) 方法中 Graphics g 的值