如何从JFrame获取JDialog textFiels值

问题描述

您好,我是Java编码的新手,并尝试在JFrame和jdialog的帮助下设计一个用户友好的桌面应用程序-

我的JFrame是-

package com.myapp.ui;
    
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JCheckBox;

public class MyFrame extends JFrame { 

private JPanel contentPane;

    public static void main(String[] args) {
        EventQueue.invokelater(new Runnable() {
            public void run() {
                try {
                    MyFrame frame = new MyFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printstacktrace();
                }
            }
        });
    }

    public MyFrame() {

        setTitle("MyFrame");
        setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100,100,450,300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5,5,5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JButton btnClickMe = new JButton("Click Me");
        btnClickMe.setBounds(271,171,115,29);
        contentPane.add(btnClickMe);
        
        JCheckBox chckbxOpenDialog = new JCheckBox("Open Dialog");      
        chckbxOpenDialog.setBounds(25,139,29);
        contentPane.add(chckbxOpenDialog);
        
        chckbxOpenDialog.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(chckbxOpenDialog.isSelected()== true){
                    MyDialog MD = new MyDialog();
                    MD.setModal(true);
                    MD.setVisible(true);
                }
            }
        });
        
        btnClickMe.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 //Here I want to get the value of textFieldName and textFieldEmail from jdialog
                 //after Click on Confirm Button in jdialog and closing/disposing it
            }
        });
    }
}

我的jdialog是-

package com.myapp.ui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.jdialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MyDialog extends jdialog {

    private final JPanel contentPanel = new JPanel();
    private JTextField textFieldName;
    private JTextField textFieldEmail;
    private JButton btnConfirm;

    public static void main(String[] args) {
        try {
            MyDialog dialog = new MyDialog();
            dialog.setDefaultCloSEOperation(jdialog.disPOSE_ON_CLOSE);
            dialog.setVisible(true);
        } catch (Exception e) {
            e.printstacktrace();
        }
    }

    public MyDialog() {
        setTitle("MyDialog");
        setBounds(100,300);
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5,5));
        getContentPane().add(contentPanel,BorderLayout.CENTER);
        contentPanel.setLayout(null);
        
        textFieldName = new JTextField();
        textFieldName.setBounds(108,26,146,26);
        contentPanel.add(textFieldName);
        textFieldName.setColumns(10);
        
        textFieldEmail = new JTextField();
        textFieldEmail.setBounds(108,68,26);
        contentPanel.add(textFieldEmail);
        textFieldEmail.setColumns(10);
        
        btnConfirm = new JButton("Confirm");
        btnConfirm.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //passing the Name and Email field value in JFrame
            }
        });
        btnConfirm.setBounds(132,141,29);
        contentPanel.add(btnConfirm);
        
        MyFrame MF = new MyFrame();
        
    }
}

JFrame和jdialog都在同一包中。我正在尝试获取

的价值

textFieldName和textFieldEmail从jdialog到JFrame

如果有人能以最好的方式指导我,那就太好了。

解决方法

您可以:

  1. 将设置器添加到MyFrame
  2. MyFrame中创建MyDialogthis的引用(使用ActionListener)(使用ActionListener
  3. MyDialog的{​​{1}}的{​​{1}}中设置字段

可能有更好的方法可以做到这一点。内置的MyFrame生成模态对话框窗口,等待用户输入。这比将JFrame的引用传递给JDialog更好。

还请注意,JOptionPane已大大取代了Java JavaFX用于桌面用户界面