You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法在两个JFrame间传输数据?Java Swing技术求助

问题分析与修复方案

嘿,我一眼就看出问题出在哪了!你这段按钮事件代码里犯了一个很典型的对象实例化错误:

private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
new JFrame2().JFrame2_JTextField.setText(this.JFrame1_JTextField.getText());
new JFrame2().setVisible(true);
}

你每次点击按钮都会创建两个完全独立的JFrame2对象:

  • 第一个new JFrame2()确实设置了文本,但你根本没调用setVisible(true)让它显示出来,这个实例创建后就被直接丢弃了;
  • 第二个new JFrame2()是一个全新的、空的窗口实例,你让它显示了,但它的文本框从来没被设置过内容,自然看不到任何东西。

修复后的基础版本

只需要创建一次JFrame2实例,先设置文本再让它显示:

private void ButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    // 创建单个JFrame2实例,完成设置后再显示
    JFrame2 frame2 = new JFrame2();
    frame2.JFrame2_JTextField.setText(this.JFrame1_JTextField.getText()); 
    frame2.setVisible(true); 
}

进阶优化:复用同一个窗口

如果不想每次点击都弹出新窗口,而是复用同一个JFrame2窗口,可以把它作为JFrame1的类成员变量:

// 在JFrame1类中声明成员变量,只初始化一次
private JFrame2 frame2;

// 在JFrame1的构造方法里初始化窗口实例
public JFrame1() {
    initComponents();
    frame2 = new JFrame2();
}

// 按钮事件中直接复用已有的窗口实例
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    // 更新文本内容
    frame2.JFrame2_JTextField.setText(this.JFrame1_JTextField.getText()); 
    // 如果窗口被用户关闭过,重新让它可见
    if (!frame2.isVisible()) {
        frame2.setVisible(true);
    }
}

这样修改后,点击按钮就能把JFrame1文本框的内容同步到JFrame2的文本框里了~

内容的提问来源于stack exchange,提问作者Hemant Lakhotiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:18:08