【问题标题】:Java - JLabel lose image and a new appear on frontJava - JLabel 丢失图像并在前面出现新的
【发布时间】:2025-11-22 06:45:01
【问题描述】:

我有一个带有图片的大 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/树图像看起来很好,但是当我在它上面输入鼠标时,它只是丢失了它的图片,而没有在它上面显示新的图片。我做错了什么?谢谢

【问题讨论】:

  • 我同意 HovercraftFullOfEels 但如果你仍然想按照你的方式做,你可以添加“c.setVisible(false);”而不是“c.setIcon(null);”在创建新标签之前。 "JLabel c1 = 新的 JLabel();"
  • 新的jlabel仍然不可见:|
  • 您是否尝试添加'c1.setVisible(true);'在 JLabel c1 = new JLabel() 之后; c1.setIcon(new ImageIcon("C:\\Users\\Lud\\Desktop\\family\\george.png")); c1.setBounds(10, 10, 32, 32);
  • 是的,我在添加之前将其设置为可见。现在工作正常,虽然我需要按照这里的建议修改我的代码。感谢您的帮助
  • 不客气。能帮到你就好了。

标签: java jlabel


【解决方案1】:

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

作为附带建议,请理解,虽然空布局和 setBounds() 可能对 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但创建的 Swing GUI 越多,使用时遇到的困难就越严重他们。当 GUI 调整大小时,它们不会调整您的组件大小,它们是增强或维护的皇家女巫,放置在滚动窗格中时它们完全失败,在与原始不同的所有平台或屏幕分辨率上查看时它们看起来很糟糕.

【讨论】:

  • 是的,但我希望用户能够对新的 JLabels 做出反应,例如将鼠标悬停在一张图片上并显示一个人的年龄等。
  • @darkchampionz:你仍然可以用原来的 JLabel 做到这一点!