最近做一个程序,包含1个继承于JFrame frame和2个继承于JPanel面板panel1和panel2...两个面板都用含另一面板对象做参数的构造方法在JFrame中初始化,
panel2上定义了一个JTextArea jtextarea,想在panel1中调用panel2.jtextarea.setText(.......)来设置panel2上文本区jtextarea上的文字,
可是没有一点效果PS:append(),getText()等等方法都没效......其他方法有些却有效比如输出 System.out.println( panel2.jtextarea.isEnabled() ); 可以得到true请高手帮忙

解决方案 »

  1.   

    你在 panel2 中做一个方法,修改自己的文字,看能否成功。如果成功,让p1 调用这个p2的方法。这样做,就是缩小问题范围,当然,要检查的代码也就少了!
      

  2.   

    不行啊,在Panel2本身里自己用setText都没用,除非用对一个按钮事件监听或者在构造函数里才能修改....
    我写的是五子棋程序,panel1是棋板,panel2是游戏功能面板,那个文本区是显示信息的...我是想在棋板panel1上的鼠标点击事件可以引起panel2上文本区上文字的变化
    比如"黑棋走棋""黑棋获胜之类的"
    程序太长了 简单的写下:
    class frame extends JFrame
    {
      public frame()
      {
        panel_1=new panel1(panel2);
        //互相传递对象进行通信,前面我已经说过除了append(),getText(),setText()等引起组件变化的方法无效,
        组件的其他判断类型的方法比如is...开头的都可以在控制台上输出TRUE或FALSE
        panel_2=new panel2(panel1);
      }
      panel2 panel_2;
      panel1 panel_l;
    }class panel1 extends JPanel
    {
       public panel1(panel2 panel_2)
       {
         this.panel_2=panel_2;
         .....
       }
       private class mouseListener implements MouseAdapter
       {
          public void mouseClicked(MouseEvent click)
          {
             panel_2.abc();//OK 我觉得证明了这两个类可以通信
              panel_2.textarea.setText("....");//就是这里不能实现!我用repaint方法重画也没用
             System.out.println(panel_2.textarea.isEnabled());//OK,输出TRUE
          }
       }
       panel2 panel_2;
    }class panel2 extends JPanel
    {
       public panel2(panel1 panel_1)
       {
         this.panel_1=panel_1;
         textarea=new textarea();
         textarea.setBounds(....);
         textarea.setText("...."); //这里是可以的
          add(textarea);
         .....
       }
       public void abc()
       {  
          System.out.println("abc");
       }
       
       panel1 panel_1;
       JTextArea textarea;
    }
      

  3.   

    你试试把frame作为参数传递进panel1中,然后在panel1里初始化panel2的对象