Walaupun anda pada mulanya menyebut menggunakan dua JFrames, nampaknya reka bentuk anda melibatkan satu JFrame (frame1) dan JDialog untuk memaparkan hasil carian. Perbezaan ini penting kerana JDialogs bergantung pada tetingkap induknya.
Untuk menghantar rujukan antara objek GUI, termasuk JFrames dan JDialogs, anda boleh menggunakan rujukan Java standard. Apabila satu tetingkap membuka yang lain, tetingkap induk biasanya mengekalkan rujukan kepada tetingkap anak dan boleh memanggil kaedah padanya.
Menentukan masa untuk mendapatkan semula data daripada kanak-kanak tetingkap bergantung pada jenisnya:
Ini contoh mudah yang membenarkan butang dalam frame1 untuk membuka JDialog dan mengisi JTextField dalam frame1 dengan teks yang dimasukkan dalam JTextField JDialog:
<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>
Untuk mendapatkan semula data daripada JTable, anda boleh menggunakan teknik yang serupa, tetapi anda mungkin perlu mempertimbangkan faktor tambahan seperti pemilihan baris jadual.
Atas ialah kandungan terperinci Berikut adalah beberapa tajuk berasaskan soalan yang menangkap intipati artikel: * Bagaimana untuk Meluluskan Nilai Antara JFrames dan JDialogs dalam Java Swing? * Mendapatkan Data daripada Windows Kanak-kanak: JFrames, JDialogs,. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!