gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:57 24 4
gpt4 key购买 nike

说实话,我刚刚学习 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com