swing用的很少,但印象中好像不能进行多个JLabel相同位置之间的切换,可以只用一个JLabel,然后在你需要切换文字的时候,调用这个JLabel的setText()方法,应该一样能满足你的要求吧

解决方案 »

  1.   

    唉~~
     zjpangxie(又胡了)
    给你看张图就明白我的意思了http://www.impk.net/marquis/TRPGzone/maperror.jpg
      

  2.   

    下面这段代码我试过了,是有效的。你参照一下试试JTable如何。
      void jButton2_actionPerformed(ActionEvent e) {
    jButton2.setVisible(false) ;
    jButton3.setVisible(false) ;jButton3.setVisible(true) ;
    jButton2.setVisible(true) ;
      }  void jButton3_actionPerformed(ActionEvent e) {
        jButton2.setVisible(false) ;
        jButton3.setVisible(false) ;    jButton2.setVisible(true) ;
    jButton3.setVisible(true) ;
      }
      

  3.   

    ………
    无效--~
    而且,你提供的方法如果控件只有两个还好说
    七个八个就死定了> <
    (你看一下我的贴图,就知道了~)
      

  4.   

    变通下就可以了,你只要让一个刷新一下就行了,如:
      void jButton2_actionPerformed(ActionEvent e) {
    jButton2.setVisible(false) ;
    jButton2.setVisible(true) ;
      }  void jButton3_actionPerformed(ActionEvent e) {
        jButton3.setVisible(false) ;
        jButton3.setVisible(true) ;
      }
    问题是要从JPanel来得到你是否点击哪个JLabel。
    你还可以考虑其他函数,如:updateUI(),revalidate() ,repaint()
    requestFocus(),甚至reshape都试试。
      

  5.   

    我这只是个思路,具体能否用到JLable我也不知道。
    那个JLabel里怎么贴图啊,这个我都还不会啊。
    给我一些代码,我也来试。不过可能要明天了,不早了。
      

  6.   

    再多说一句,JWindow这个控件本身就有一个函数叫做tofront(),它的作用就是当开了多个JWindow的时候,比如说jWindow1,jWindow2,jWindow3则jWindow1.tofront(),就能让jWindow1这个窗口提升到最前(即重叠时,它在最前面)。我现在就在寻找的就是这么一个函数,不过它针对的不是JWindow这样的容器,而是JLabel这样的控件……
      

  7.   

    不知道楼主试验怎样,但我觉得:
    当设置为不可视时,你的其他图片将看不到(完全消失),我想你并不是想得到这样的效果.
    我想应该有这样的方法,但我不会,可有个笨笨的办法实现你的效果:
    再制作相同的四个图片(层次在现在的上面),平时隐藏了,如果单击某个,就将对应的在对应的位置上显示出来.
    楼主不错嘛,做做java游戏,羡慕.
      

  8.   

    qiuwanbin(哈哈,我呀。) 
    》我这只是个思路,具体能否用到JLable我也不知道。
    》那个JLabel里怎么贴图啊,这个我都还不会啊。
    》给我一些代码,我也来试。不过可能要明天了,不早了。代码比较长,我把让JLabel上贴图的几个关键句子贴出来//获得当前路径
    String path=(System.getProperty("user.dir"));
    //获得图片文件夹路径
    String picPath=path+"\\images\\"//只要当前目录的images文件夹下有1.jpg,2.jpg,3.jpg即可
    lbChr1=new JLabel(new ImageIcon(facePath+"1.jpg"));
    lbChr2=new JLabel(new ImageIcon(facePath+"2.jpg"));
    lbChr3=new JLabel(new ImageIcon(facePath+"3.jpg"));
      

  9.   

    那你看看JWindow里怎么做的,自己继承做一个新类就是了
      

  10.   

    jlabel没有继承tofront()方法,不能用吧.
      

  11.   

    JWindow是框架容器,和JFrame、JApplet是一个级别的,JLabel是控件比JPanel还要低一个级别……从大框架上就是不一样的啊 > <第一级别:JWindow,JFrame,JApplet
    第二级别:JPanel,JMenuBar
    第三级别:JTextPane,JButton,JLabel等等
      

  12.   

    》不知道楼主试验怎样,但我觉得:
    》当设置为不可视时,你的其他图片将看不到(完全消失),我想你并不是想得到这样的效果.
    》我想应该有这样的方法,但我不会,可有个笨笨的办法实现你的效果:
    》再制作相同的四个图片(层次在现在的上面),平时隐藏了,如果单击某个,就将对应的在对应的位置上显示出来.
    》楼主不错嘛,做做java游戏,羡慕.不是没想过这个法子。但是对于小批量的层次设置还是可以的,对于像我这样十几个几十个的大批量的层次设置就不行了 >.<设想一下十几个JLabel,要每一个层次都有相对应的实体存在还要判断会死人的 >_____________<
      

  13.   

    这个对你没有用,你涉及的是同控件的z-order
      

  14.   

    倒,我的图片还是出不来。开始我以为要gif,现在按你说的也出不来。
    :((((
      

  15.   

    你也可以只设一个jlabel.当你切换时,动态变换它的位置和图片,不就ok了.
      

  16.   

    对就是深度问题(z-order) --有一个布局管理器叫CardLayout,好像就能设置里面的东西的显示层次……问题是我现在用的布局管理器是null,这样才能设置上面的JLabel随鼠标的拖动而移动……
      

  17.   

    》倒,我的图片还是出不来。开始我以为要gif,现在按你说的也出不来。
    》:((((如果你是在非Window操作环境下,路径要有改动的里面的“\\”要改为“/”还有,jpg、gif都是Java默认可以直接使用的图片格式,不用专门解析
      

  18.   

    T.T这个问题那么高深么 >.<究竟怎么解决啊~
      

  19.   

    不要设置为null,那样虽然方便,但以后可能会遇到更多的问题.
    那个CardLayout,需要你在每个Card上都有同样的图片,但order不同,象你的也需要十多个吧
    随鼠标的拖动而移动肯定有办法解决
      

  20.   

    我这个小程序的主要设计思路如下:几个JLabel上装载图片,每个JLabel可以随鼠标拖动而移动,(当发生重叠时,鼠标拖动的那个JLabel保持在最上方)()里的这句话就是我现在苦苦思索而没有实现的内容 >.<
      

  21.   

    1.只要点击一下,就可以在最上面了,不必一定要拖吧?
    2.jlabel在缺省时候将不响应鼠标事件.但有办法可以使他接受,因本人没有试过办法,不敢乱说
      

  22.   

    》1.只要点击一下,就可以在最上面了,不必一定要拖吧?
    》2.jlabel在缺省时候将不响应鼠标事件.但有办法可以使他接受,因本人没有试过办法,不敢乱说1、对。拖动一个控件的全过程实际上隐含了鼠标的pressed、moved、released这三个动作,我只要对控件的pressed进行监听,并且使其toFront()即可。问题是这个toFront()如何实现>_<2、嗯,我已经实现鼠标拖动了
    简略方法如下:
    public void mouseDragged(MouseEvent e)
      {
      //设置成只允许右键拖动
      if((e.getModifiers() & InputEvent.BUTTON1_MASK) !=0)
      {  
        int x = e.getX();
        int y = e.getY();                         //之所以这么繁琐是为了把鼠标定位在JLabel中心
             lbChr[i].setLocation(lbChr[i].getX()+(x-lbChr[i].getWidth()/2)/2,lbChr[i].getY()+(y-lbChr[i].getHeight()/2)/2);
    }
    }
      

  23.   

    多谢多谢我自己也在翻找资料中 >____<没想到这个问题这么复杂。
      

  24.   

    考虑使用JButton,
    Border为line:
    jButton2.setBorder(BorderFactory.createLineBorder(Color.black));什么事件都不要抓。
    基本上能满足要求只是,鼠标在移动越界时,默认在上面那个也会显示上来,
    而默认在下面这个,当鼠标移出时,会显示上来。
      

  25.   

    1、经过一夜的奋战找到个控件,是控制层次用的JLayeredPane,将你的jlabel放到JLayeredPane中,一个对应一个,很方便的就能进行翻层次。
    2、tofront方法不是能被jlabel继承的,也就是说实现它很困难。
    3、感觉上,不必要将定位与jlabel的中心,实际上更简单的办法是用jbutton代替jlabel。
      

  26.   

    多谢诸位的帮助我用JLabel而不用JButton是有原因的:这个程序的界面我应用了L&F,调用的是当前系统的界面,如果在XP系统中,Button控件的界面已经被系统定义,我对它界面的更改无效(或者说更改起来会有点难度)。而且Button对鼠标的一些动作已经在Java内部定义好,更改起来也会有些问题。(比如说这个Pressed和Released的动画效果我就不希望有--)用Label就没这些问题,全部都可以由我自己控制……就是比较繁琐-0-
      

  27.   

    qqbz(qqbz)
    多谢你的方法,已经实现了 ^ ^
    请到下面这个帖子签下,我好把分给你 *^ ^*http://expert.csdn.net/Expert/TopicView1.asp?id=2975712