Pergunta

Eu tenho um JFrame (pai) que cria um quadro de entrada (criança) onde eu recebo algum parâmetro.

No quadro "criança" eu tenho "OK" e "Cancelar" botões.

Quando o botão "ok" é pressionado, as necessidades quadro pai para ser atualizado com novos dados.

Qual é a melhor maneira de fazer isso ??

Foi útil?

Solução

Passe em uma referência para o quadro pai quando você cria (ou exibição) o quadro filho. Isso vai exigir um método construtor ou exibir sobrecarregado.

Uma vez que a criança tem a referência, ele pode, naturalmente, chamar qualquer método que os expõe-mãe, público, como UpdateDate ()

Outras dicas

A partir do 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);

    .....

  }

}

Você poderia ter o JFrame implementar ActionListener e adicioná-lo ao botão usando addActionListener.

Eu gosto de colocar um 'lançamento) (' método em todos os meus quadros / diálogos. Com a modalidade direita ele pode retornar um resultado.

Exemplo de valor de retorno de diálogo:

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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top