我有两个分别名为first和second的JFrame。两个帧都有jtextfields到getText()和setText()。我能够从第一个到第二个JFrame setText,但是从第二个到第一个不能使用setText。
在第一帧和第二帧中,我制作了所有JTextField 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;
单击第二帧按钮第一帧应该更新。我不想再打开第一帧。
答案 0 :(得分:1)
在开始之前,请查看The Use of Multiple JFrames, Good/Bad Practice?`
“点击第二帧按钮第一帧应该更新。我不想再打开第一帧。”
由于您正在创建新的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
答案 1 :(得分:0)
如果您“不想再次打开第一帧”,则必须避免先创建新实例,而是使用之前实例的引用。
所以你需要一个引用......给你的第二个引用的第一种方法是在构造函数中提供它,如:
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);
然后,您需要将引用存储在第二个类中,并使用它来访问文本字段:
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());
}
注意:
我不会将textfields设为public static,我宁愿提供getter方法。
我建议您遵守命名约定:对类使用大写字母,并对变量使用重要名称。
答案 2 :(得分:0)
尝试将第二个jframe作为参数传递到第一个jframe中,而不是使用它来更改文本字段