Maison  >  Article  >  Java  >  Voici quelques titres basés sur des questions qui capturent l’essence de l’article : * Comment transmettre des valeurs entre JFrames et JDialogs dans Java Swing ? * Récupération de données depuis des fenêtres enfants : JFrames, JDialogs,

Voici quelques titres basés sur des questions qui capturent l’essence de l’article : * Comment transmettre des valeurs entre JFrames et JDialogs dans Java Swing ? * Récupération de données depuis des fenêtres enfants : JFrames, JDialogs,

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 19:50:30437parcourir

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

Transmission de valeurs entre JFrames

Comprendre la conception du programme

Bien que vous ayez initialement mentionné l'utilisation de deux JFrames, il semble que votre conception implique un JFrame (frame1) et un JDialog pour afficher les résultats de recherche. Cette distinction est importante car les JDialogs dépendent de leur fenêtre parent.

Passer des références

Pour transmettre des références entre les objets GUI, y compris les JFrames et les JDialogs, vous pouvez utiliser des références Java standard. Lorsqu'une fenêtre en ouvre une autre, la fenêtre parent conserve généralement une référence à la fenêtre enfant et peut y appeler des méthodes.

Récupérer des données au bon moment

Déterminer quand récupérer les données d'un enfant la fenêtre dépend de son type :

  • Dialogues modaux : Lorsqu'une boîte de dialogue modale revient, le code immédiatement après avoir rendu la boîte de dialogue visible est le moment idéal pour récupérer son état.
  • Dialogues non modaux : Pour les dialogues non modaux, vous devrez peut-être utiliser des écouteurs pour déterminer quand extraire les informations.

Exemple

Voici un exemple simple qui permet à un bouton dans frame1 d'ouvrir un JDialog et de remplir un JTextField dans frame1 avec le texte saisi dans le JTextField du 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>

Pour récupérer des données d'une JTable, vous pouvez utiliser des techniques similaires, mais vous devrez peut-être prendre en compte des facteurs supplémentaires tels que la sélection des lignes du tableau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn