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