la gestione di frame principale dal telaio bambino su Java Swing
Domanda
Ho un JFrame (padre) che crea una cornice di ingresso (bambino) dove ho alcuni parametri.
Nella cornice "bambino" ho "OK" e "Annulla" pulsanti.
Quando si preme il tasto "ok", il frame genitore deve essere aggiornato con i nuovi dati.
Qual è il modo migliore per farlo ??
Soluzione
Passare un riferimento al frame genitore quando si crea (o display) frame secondario. Ciò richiederà un metodo di costruzione o di visualizzazione sovraccarico.
Una volta che il bambino ha il riferimento, può naturalmente chiamare qualsiasi metodo che il genitore espone come pubblico, come UpdateDate ()
Altri suggerimenti
A partire da 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);
.....
}
}
Si potrebbe avere il JFrame implementare ActionListener e inserirlo al pulsante utilizzando addActionListener.
mi piace mettere un 'lancio ()' metodo su tutti i miei fotogrammi / finestre di dialogo. Con la modalità giusta può restituire un risultato.
Esempio di valore di ritorno dalla finestra:
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;
}
}