无法正确设置文本

时间:2014-02-22 13:30:16

标签: java swing

我有两个类,都扩展了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,并且应该通过以下方式显示用户的姓名文本字段,但它没有。

2 个答案:

答案 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);
}