问题
I have a jframe (parent) which creates an input frame (child) where I get some parameter.
In the "child" frame I have "ok" and "cancel" buttons.
When "ok" button is pressed, the parent frame needs to be updated with new data.
What is the best way to do that??
回答1:
Pass in a reference to the parent frame when you create (or display) the child frame. This will require an overloaded constructor or display method.
Once the child has the reference, it can of course call any method that the parent exposes as public, like UpdateDate()
回答2:
As of 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);
.....
}
}
回答3:
You could have the JFrame implement ActionListener and add it to the button using addActionListener.
回答4:
I like to put a 'launch()' method on all my frames / dialogs. With the right modality it can return a result.
Example of return value from dialog:
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;
}
}
来源:https://stackoverflow.com/questions/573378/managing-parent-frame-from-child-frame-on-java-swing