управление родительским фреймом из дочернего фрейма на java swing

StackOverflow https://stackoverflow.com/questions/573378

Вопрос

У меня есть 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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top