Если честно, я только учусь GUI на Java и в настоящее время изучаю только 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 нужен фрейм владельца, и должен ли он быть фреймом основного класса, или если я создаю другой класс фрейма, разве это не будет похоже на окно внутри другого? Диалог меня сильно смущает, так как я думал, что могу просто создать его экземпляр, но он показывает мне ошибки, если он не создан внутри класса типа фрейма. Я думал, что это был контейнер самого высокого уровня.