我有一张带有图片的大型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 /树图像看起来很好但是当我在它上面输入鼠标时,它只是丢失了它的图片而没有显示它上面的新图片。我做错了什么?感谢
答案 0 :(得分:2)
不要创建新的JLabel,而只需在现有的JLabel上设置Icon。
作为一个侧面推荐,请理解虽然null布局和setBounds()看起来像Swing新手一样,最简单,最好的方式来创建复杂的GUI,但是你创建的Swing GUI越多,你就越多使用它们时会遇到严重的困难。当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。