import javax.swing.*;class java 
{ public static void main(String args[])
{
JButton b1=new JButton("aaa");
JButton b2=new JButton("bbb");
JPanel jp=new JPanel();
JFrame jf=new JFrame();
jf.getContentPane().add(jp);
b2.setVisible(false);

jp.add(b1);
jp.add(b2);
jf.pack();
jf.show();
b1=b2;
jp.validate();

}
}为什么还能显示按钮?b1=b2的时候b1的setVisibel不是false了吗? 用revalidate也不行啊,高手帮忙!!

解决方案 »

  1.   

    你所要明白的只需要一句话:
    Java里除了基本数据类型(int,char之类的)的声明就是定义,其它所有声明的其实全是指针。
    int a;             // a本身就是int
    int b = 3;
    a = b;             // 通过传值拷贝将b的值3赋给aString c;                  // c是String型指针
    String d = new String();   // d指向一个String对象
    c = d;                     // 通过传值拷贝将d的值(也就是一个对象的地址)赋给c
      

  2.   

    不要被某些书说“Java里没有指针”迷惑了,Java里全是指针!!!
      

  3.   

    并不会出错啊,b1.getlabel等于bbb了
    而且b1=b2以后 b1的属性等于b2的属性了,也许b1的属性都指向b2了吧,关键是怎么让b1重画??
      

  4.   

    b1 = b2 是让两个指针指向了同一个对象!!!
    b1原来指向的对象就丢掉了!!!
      

  5.   

    只有用b1.setVisible(b2.isVisible())才可以!!!
    如果你还不明白我在说什么,还是先好好看看Java基础吧。