[英]How to setText into a jTextField that is inside a jPanel that is inside a jFrame to from Other jFrame
[英]unable setText() in JTextField from another JFrame
我有两个分别命名为first和second的JFrame。 两个框架都有用于getText()和setText()的jtextfields。 我能够从第一个到第二个JFrame设置setText,但是不能从第二个到第一个设置setText。
在第一帧和第二帧中,我将所有JTextFields设为public static
first.java
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
second sec = new second();
sec.jTextField1.setText(this.jTextField1.getText()); // this works
sec.jTextField2.setText(this.jTextField2.getText());
sec.setVisible(true);
public static javax.swing.JTextField jTextField1;
public static javax.swing.JTextField jTextField2;
private javax.swing.JButton jButton1;
second.java
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
first f = new first();
f.jTextField1.setText(this.jTextField3.getText()); //not working
f.jTextField2.setText(this.jTextField4.getText());
}
public static javax.swing.JTextField jTextField1;
public static javax.swing.JTextField jTextField2;
public static javax.swing.JTextField jTextField3;
public static javax.swing.JTextField jTextField4;
private javax.swing.JButton jButton1;
在单击第二帧按钮时,第一帧应该得到更新。 我不想再次打开第一帧。
在我开始之前,先看看“使用多个JFrame,良好/不良实践”。
“单击第二帧按钮时,第一帧应该会更新。我不想再次打开第一帧。”
它不起作用,因为您正在创建一个新的JFrame
( first
)。 当然它将打开一个新的框架。 代替创建新框架,而传递相同的框架作为参考。
我将为您提供一个使用JDialog
而不是JFrame
的示例。 如果在阅读了以上链接之后仍然确定要使用JFrame
,则可以将相同的代码实现到JFrame
。 它们基本上具有相同的构造。
因此,基本上,通过引用是我的意思。 将JFrame
传递给JDialog
的构造函数。 这样,您传递给它的JFrame
将与引用的JFrame
相同。
public class MyDialog extends JDialog {
private First frame;
private JTextField thisTextField;
public MyDilaog(final First frame, boolean modal) {
super(frame, modal);
this.frame = frame;
thisTextFiled = new JTextField(20);
}
}
诠释你的First
类只是创建它像这样
MyDialog dialog = new MyDialog(First.this, true);
现在,您可以参考框架。 你也想一getter
中JFrame
将访问类JTextField
从JFrame
类。 然后,您可以设置它的文本,也可以参考它。 因此,您可以从JDialog
执行类似的操作
public void actionPerformed(ActionEvent e) {
String text = thisTextField.getText();
JTextField fieldFromFrame = frame.getTextField();
fieldFromFrame.setText(text):
}
另外,您需要使用Java命名约定。 类名以大写字母表示。 所以First
不是first
如果“不想再次打开第一帧”,则必须避免创建first的新实例,而应使用先前实例的引用。
因此,您需要一个参考...一种方法,可以在构造函数中提供第二个参考,例如:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
second sec = new second(this); //notice I'm passing a reference to this as an argument second's contstructor
sec.jTextField1.setText(this.jTextField1.getText()); // this works
sec.jTextField2.setText(this.jTextField2.getText());
sec.setVisible(true);
然后,您需要将对first的引用存储在第二个类中,并使用它来访问文本字段:
private first f;
public second(first referenceToFirst){
this.f=referenceToFirst;
}
好的,然后在单击第二个按钮时使用f字段而不是首先实例化一个新的...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
//first f = new first(); //don't instantiate a new first, use the one you got in the constructor
f.jTextField1.setText(this.jTextField3.getText());
f.jTextField2.setText(this.jTextField4.getText());
}
笔记:
我不会使文本字段成为公共静态对象,而是提供getter方法。
我建议您遵守命名约定:对类使用大写字母,对变量使用有效的名称。
尝试将第二个jframe作为第一个jframe中的参数传递,而不是使用它来更改文本字段
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.