Während Sie ursprünglich die Verwendung von zwei JFrames erwähnt haben, scheint es, dass Ihr Design einen JFrame (Frame1) umfasst. und ein JDialog zum Anzeigen von Suchergebnissen. Diese Unterscheidung ist wichtig, da JDialogs von ihrem übergeordneten Fenster abhängig sind.
Um Referenzen zwischen GUI-Objekten, einschließlich JFrames und JDialogs, zu übergeben, können Sie Standard-Java-Referenzen verwenden. Wenn ein Fenster ein anderes öffnet, behält das übergeordnete Fenster normalerweise einen Verweis auf das untergeordnete Fenster bei und kann darauf Methoden aufrufen.
Bestimmen, wann Daten von einem untergeordneten Fenster abgerufen werden sollen Fenster hängt von seinem Typ ab:
Hier Ein einfaches Beispiel, das es einer Schaltfläche in Frame1 ermöglicht, einen JDialog zu öffnen und ein JTextField in Frame1 mit dem im JTextField des JDialogs eingegebenen Text zu füllen:
<code class="java">import java.awt.Window; import java.awt.Dialog.ModalityType; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class WindowCommunication { public static void main(String[] args) { java.awt.EventQueue.invokeLater(() -> createAndShowUI()); } private static void createAndShowUI() { JFrame frame1 = new JFrame("frame1"); MyFramePanel panel1 = new MyFramePanel(); frame1.getContentPane().add(panel1); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.pack(); frame1.setLocationRelativeTo(null); frame1.setVisible(true); } static class MyFramePanel extends JPanel { private JTextField textField; private JButton openDialogButton; private JDialog dialog; private MyDialogPanel dialogPanel; public MyFramePanel() { textField = new JTextField(10); textField.setEditable(false); textField.setFocusable(false); openDialogButton = new JButton("Open Dialog"); openDialogButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { openDialogAction(); } }); add(textField); add(openDialogButton); } private void openDialogAction() { if (dialog == null) { Window win = SwingUtilities.getWindowAncestor(this); if (win != null) { dialog = new JDialog(win, "My Dialog", ModalityType.APPLICATION_MODAL); dialogPanel = new MyDialogPanel(); dialog.getContentPane().add(dialogPanel); dialog.pack(); dialog.setLocationRelativeTo(null); } } dialog.setVisible(true); // Here, after the modal dialog is disposed, the text from the // dialog's JTextField is retrieved and set into this JDialog's JTextField. textField.setText(dialogPanel.getFieldText()); } } static class MyDialogPanel extends JPanel { private JTextField textField; private JButton okButton; public MyDialogPanel() { textField = new JTextField(10); okButton = new JButton("OK"); okButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { okButtonAction(); } }); add(textField); add(okButton); } public String getFieldText() { return textField.getText(); } private void okButtonAction() { Window win = SwingUtilities.getWindowAncestor(this); if (win != null) { win.dispose(); } } } }</code>
Zum Abrufen von Daten aus einer JTable können Sie ähnliche Techniken verwenden, Möglicherweise müssen Sie jedoch zusätzliche Faktoren berücksichtigen, z. B. die Auswahl der Tabellenzeile.
Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die den Kern des Artikels zusammenfassen: * Wie übergebe ich Werte zwischen JFrames und JDialogs in Java Swing? * Abrufen von Daten aus untergeordneten Fenstern: JFrames, JDialogs,. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!