gestão quadro pai do quadro filho em java swing
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 ??
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;
}
}