Java - JLabel丢失图像,并在前面显示一个新图像

时间:2015-10-27 16:35:56

标签: java jlabel

我有一张带有图片的大型JLabel,我想在用户将鼠标放在上面时,会丢失图像,其他小图片会显示在其中,彼此靠近。像家谱一样,主图像是树,当输入鼠标时,小图片就会出现在彼此旁边,如下图所示。我用:

JLabel c = new JLabel();
c.setBorder(new EtchedBorder(EtchedBorder.RAISED));
c.setIcon(new ImageIcon("C:\\Users\\Lud\\Desktop\\family\\tree.png"));
c.setBackground(new Color(192, 192, 192));
c.setOpaque(true);
c.setBounds(5, 5, 256, 256);

    c.addMouseListener(new MouseAdapter() {
        public void mouseEntered(MouseEvent me) {
            c.setIcon(null);
            JLabel c1 = new JLabel();
            c1.setIcon(new ImageIcon("C:\\Users\\Lud\\Desktop\\family\\george.png"));
            c1.setBounds(10, 10, 32, 32);
            add(c1);
        }
        public void mouseExited(MouseEvent me) {

        }
    });
    add(c);

主要的JLabel /树图像看起来很好但是当我在它上面输入鼠标时,它只是丢失了它的图片而没有显示它上面的新图片。我做错了什么?感谢

enter image description here

1 个答案:

答案 0 :(得分:2)

不要创建新的JLabel,而只需在现有的JLabel上设置Icon。

作为一个侧面推荐,请理解虽然null布局和setBounds()看起来像Swing新手一样,最简单,最好的方式来创建复杂的GUI,但是你创建的Swing GUI越多,你就越多使用它们时会遇到严重的困难。当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。