Rumah  >  Artikel  >  Java  >  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,

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,

Barbara Streisand
Barbara Streisandasal
2024-10-26 19:50:30437semak imbas

Here are a few question-based titles that capture the essence of the article:

* How to Pass Values Between JFrames and JDialogs in Java Swing?
* Retrieving Data from Child Windows: JFrames, JDialogs, and Table Models in Java Swing
* Mastering Communicati

Melalui Nilai antara JFrames

Memahami Reka Bentuk Program

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.

Meluluskan Rujukan

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.

Mendapatkan Data Pada Masa Yang Tepat

Menentukan masa untuk mendapatkan semula data daripada kanak-kanak tetingkap bergantung pada jenisnya:

  • Dialog Modal: Apabila dialog modal kembali, kod sejurus selepas membuat dialog kelihatan adalah masa yang sesuai untuk mendapatkan semula keadaannya.
  • Dialog Bukan Modal: Untuk dialog bukan modal, anda mungkin perlu menggunakan pendengar untuk menentukan masa untuk mengekstrak maklumat.

Contoh

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn