Passer des valeurs entre des JFrames
Défi
Lorsque vous cliquez sur une ligne dans une JTable dans un deuxième JFrame, l'objectif est que les valeurs sélectionnées remplissent les champs de texte du JFrame d'origine.
Analyse
Bien que l'architecture du programme puisse suggérer d'utiliser un JDialog plutôt que un JFrame, les deux reposent sur le même principe de transmission de références d'objet GUI comme dans le code Java standard.
Dans le cas de fenêtres JFrame ouvrant d'autres JFrames, le premier cadre contient généralement une référence au second, lui permettant de appeler ses méthodes. Le timing de ces appels dépend du fait que la deuxième image soit une boîte de dialogue modale ou non.
Solution
Pour les boîtes de dialogue modales, le moment idéal pour récupérer l'état est immédiatement après la boîte de dialogue revient. Pour les dialogues non modaux, un écouteur peut être utilisé pour surveiller quand les informations doivent être extraites.
Exemple de code
Pour illustrer ce concept avec un exemple simple, considérons le code suivant :
<code class="java">// MyFramePanel holds a reference to MyDialogPanel and its JDialog class MyFramePanel extends JPanel { // ... // When the "Open Dialog" button is clicked, the dialog is opened private void openTableAction() { if (dialog == null) { dialog = new JDialog(win, "My Dialog", ModalityType.APPLICATION_MODAL); dialog.getContentPane().add(dialogPanel); dialog.pack(); dialog.setLocationRelativeTo(null); } dialog.setVisible(true); // Modal dialog takes over // After the dialog is disposed, retrieve the text from its JTextField field.setText(dialogPanel.getFieldText()); } }</code>
Cet exemple montre comment la référence au panneau de dialogue permet aux données du champ de texte de la boîte de dialogue d'être transférées vers le champ de texte du cadre principal. Une technique similaire peut être appliquée à la récupération de données d'une JTable.
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!