【发布时间】:2020-05-24 03:56:51
【问题描述】:
说实话,我只是在学习 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
}
}
非常感谢您的帮助。另外,如果有人愿意,请向我解释为什么 Dialog 需要一个所有者框架,它是否需要成为主类框架,或者如果我创建另一个框架类,那不会像另一个框架内的窗口吗?对话框让我很困惑,因为我认为我可以创建它的一个实例,但它向我显示错误,除非它是在框架类型类中创建的。我认为它本身就是一个顶级容器。
【问题讨论】:
-
“目前仅学习 AWT” 没有充分的理由学习使用 AWT 组件。请参阅 this answer 了解放弃 AWT 组件以支持 Swing 的许多充分理由。
标签: java user-interface awt