我有两个类,都扩展了JFrame
。
public class A extends JFrame {
JTextField pA, pB;
String a1, b2;
public A()
{
pA = new JTextField (10);
pA.setEditable(false);
pA.setText(""+a1);
pB = new JTextField (10);
pB.setText(""+b2);
pB.setEditable(false);
add(pA); add(pB);
}
}
在我的另一堂课中:
public class B extends JFrame implements ActionListener
{
String a, b;
JButton ok;
JTextField jtext1, jtext2; //where the user will input names
public B()
{
jtext1 = new JTextField(10);
jtext2 = new JTextField(10);
ok = new JButton("OK");
ok.addActionListener(this);
add(jtext1);
add(jtext2);
add(ok);
}
public void actionPerformed (ActionEvent e)
{
if (e.getSource() == ok)
{
a = jtext1.getText();
b = jtext2.getText();
if (!a.equals("") && !b.equals("") {
A x = new A();
x.a1 = a;
x.b2 = b;
}
else
{
//some code
}
}
}
}
我没有收到任何错误,但问题是当我点击课程ok
中的B
时,会弹出课程A
,并且应该通过以下方式显示用户的姓名文本字段,但它没有。
答案 0 :(得分:3)
你的代码试图在初学者的谬误下工作,如果你将一个对象分配给两个变量,然后更改其中一个变量的赋值,那么第二个变量将神奇地改变赋值,而它不会这样工作。
您的B级会更改A的字符串所持有的值,但 之后 A已使用原始字符串来设置A文本字段。
解决方案:提供一个公共setter方法,允许其他类在其文本字段中设置文本。
即,
public class A extends JFrame {
JTextField pA, pB;
public String a1, b2;
public A() {
pA = new JTextField (10);
pA.setEditable(false);
pA.setText(a1);
pB = new JTextField (10);
pB.setText(b2);
pB.setEditable(false);
setLayout(new FlowLayout);
add(pA);
add(pB);
}
public void setPaText(String text) {
pA.setText(text);
}
public void setPbText(String text) {
pB.setText(text);
}
}
或者给A一个构造函数,允许外部类在对象创建时设置字段。或两者都做!
答案 1 :(得分:3)
您尝试在构造函数中设置textfields之后设置它们。将它们作为参数发送给构造函数并创建文本字段。
public A( String a1, String b1){
pA = new JTextField (10);
pA.setEditable(false);
pA.setText(a1);
pB = new JTextField (10);
pB.setText(b2);
pB.setEditable(false);
add(pA); add(pB);
}