управление родительским фреймом из дочернего фрейма на java swing
Вопрос
У меня есть jframe (родительский), который создает входной фрейм (дочерний), где я получаю некоторый параметр.
В "дочернем" фрейме у меня есть кнопки "ок" и "отмена".
Когда нажата кнопка "ok", родительский фрейм необходимо обновить новыми данными.
Каков наилучший способ сделать это??
Решение
Передавайте ссылку на родительский фрейм при создании (или отображении) дочернего фрейма.Для этого потребуется перегруженный конструктор или метод отображения.
Как только дочерний элемент получит ссылку, он, конечно, может вызвать любой метод, который родительский элемент предоставляет как общедоступный, например UpdateDate()
Другие советы
Начиная с Java 1.3
public class MyPanel extends JPanel
{
public MyPanel() {
....
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
// <<<< HERE'S THE INTERESTING BIT >>>>
javax.swing.SwingUtilities.getWindowAncestor(MyPanel.this).dispose();
}
}
);
add(cancelButton);
.....
}
}
Вы могли бы заставить JFrame реализовать ActionListener и добавить его к кнопке с помощью addActionListener .
Мне нравится помещать метод 'launch()' во все мои фреймы / диалоговые окна.При правильной модальности он может вернуть результат.
Пример возвращаемого значения из диалогового окна:
private static class MyDialog extends JDialog {
String result;
private JButton btnOk = new JButton("OK");
public MyDialog() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setModalityType(ModalityType.APPLICATION_MODAL);
add(btnOk);
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
result = "Ok";
setVisible(false);
}
});
}
public String launch() {
result = "Cancel";
pack();
setVisible(true);
return result;
}
}