Java Swing中如何实现两个JFrame之间的数据传递
可直接运行的实现代码
package eventdriven; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventDriven extends JFrame { JPanel items = new JPanel(); JLabel fName = new JLabel("First Name: "); JLabel lName = new JLabel("Last Name: "); JLabel mName = new JLabel("Middle Name: "); JLabel mNum = new JLabel("Mobile Number: "); JLabel eAdd = new JLabel("Email Address: "); JTextField fname = new JTextField(15); JTextField lname = new JTextField(15); JTextField mname = new JTextField(15); JTextField mnum = new JTextField(15); JTextField eadd = new JTextField(15); JButton submit = new JButton("Submit"); JButton clear = new JButton("Clear All"); JFrame output; public EventDriven() { this.setTitle("INPUT"); this.setResizable(false); this.setSize(230, 300); this.setLocation(300, 300); this.setLayout(new FlowLayout(FlowLayout.CENTER)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(fName); this.add(fname); this.add(lName); this.add(lname); this.add(mName); this.add(mname); this.add(mNum); this.add(mnum); this.add(eAdd); this.add(eadd); submit.addActionListener(new btnSubmit()); this.add(submit); clear.addActionListener(new btnClearAll()); this.add(clear); this.add(items); this.setVisible(true); } class btnSubmit implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == submit) { submit.setEnabled(false); // 初始化输出窗体 output = new JFrame("OUTPUT"); output.setSize(300,280); output.setLayout(new FlowLayout(FlowLayout.CENTER)); output.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 读取输入内容并格式化 String fullName = lname.getText().trim() + mname.getText().trim() + fname.getText().trim(); String mobile = mnum.getText().trim(); String email = eadd.getText().trim(); StringBuilder infoSb = new StringBuilder(); infoSb.append("姓名:").append(fullName).append("\n") .append("手机号:").append(mobile).append("\n") .append("邮箱:").append(email); // 创建文本区域展示内容,设置不可编辑 JTextArea infos = new JTextArea(10, 20); infos.setText(infoSb.toString()); infos.setEditable(false); output.add(infos); // 添加确认按钮 JButton okay = new JButton("Okay"); okay.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清空输入框、重置提交按钮状态、关闭输出窗体 fname.setText(null); lname.setText(null); mname.setText(null); mnum.setText(null); eadd.setText(null); submit.setEnabled(true); output.dispose(); } }); output.add(okay); output.setVisible(true); } } } class btnClearAll implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == clear) { fname.setText(null); lname.setText(null); mname.setText(null); mnum.setText(null); eadd.setText(null); submit.setEnabled(true); // 判空避免空指针 if(output != null) { output.dispose(); } } } } public static void main(String[] args) { EventDriven window = new EventDriven(); } }
核心调整说明
- 将原本的全局okay按钮改为在提交时动态创建,避免Swing组件只能挂载到单个容器的异常
- 新增输入内容读取、格式化拼接逻辑,按需求展示为
姓名:xxx的格式 - 给输出窗体添加了不可编辑的文本区域用于展示用户输入内容
- 修复了过时方法调用、空指针风险等问题
- 调整了输出窗体的关闭逻辑,避免关闭输出窗体时连带退出整个程序
内容的提问来源于stack exchange,提问作者zone007
相关产品推荐
相关产品推荐

