为何无法在两个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
相关产品推荐
相关产品推荐

