我有一个带有图片的大 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/ TreeMap 像看起来很好,但是当我将鼠标放在它上面时,它只是丢失了它的图片,而没有在其上方显示新图片。我做错了什么?谢谢
最佳答案
不要创建新的 JLabel,而是简单地在现有 JLabel 上设置图标。
作为一个侧面建议,请理解,虽然 null 布局和 setBounds() 可能对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但您创建的 Swing GUI 越多,在使用时遇到的困难就越严重他们。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,放置在滚动 Pane 中时它们完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕.
关于Java - JLabel 丢失图像并且新出现在前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33373547/