управление родительским фреймом из дочернего фрейма на Java Swing - PullRequest
2 голосов
/ 21 февраля 2009

У меня есть jframe (родительский), который создает входной кадр (дочерний), где я получаю некоторый параметр.

В «детской» рамке у меня есть кнопки «ОК» и «Отмена».

При нажатии кнопки «ОК» родительский кадр необходимо обновить новыми данными.

Каков наилучший способ сделать это?

Ответы [ 4 ]

10 голосов
/ 07 марта 2009

Начиная с 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);

    .....

  }

}
4 голосов
/ 21 февраля 2009

Передача ссылки на родительский кадр при создании (или отображении) дочернего кадра. Это потребует перегруженного конструктора или метода отображения.

После того, как у ребенка есть ссылка, он, конечно, может вызвать любой метод, который родительский объект предоставляет как public, например UpdateDate ()

0 голосов
/ 26 ноября 2010

Мне нравится добавлять метод 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;
    }
}
0 голосов
/ 22 февраля 2009

Вы можете заставить JFrame реализовать ActionListener и добавить его к кнопке, используя addActionListener.

...