gpt4 book ai didi

java - JLabel 被绘制了两次

转载 作者:行者123 更新时间:2023-11-29 07:39:59 29 4
gpt4 key购买 nike

在开始之前,先声明一下我是 Java 的新手。我为我的无知提前道歉。

因此,我创建了一个 JFrame,将图像加载为 ImageIcon,然后将其转换为 JLabel,并将其添加到框架中。问题是,很难控制标签的大小和位置。

我找到了这个解决方案:

        final ImageIcon image = new ImageIcon(loadFrames.class.getResource("/images/testimage.png"));


JLabel imageLabel = new JLabel(image){

@Override
public void paintComponent (Graphics g) {
super.paintComponent (g);
if (image != null) {
g.drawImage (image.getImage(), 300, 0, image.getIconWidth(), image.getIconHeight(), null);
}
}
};

gameFrame.add(imageLabel);

imageLabel.setVisible(true);
gameFrame.setVisible(true);

如您所见,我在网上找到了一个响应,其中显示了 Graphics 对象的用法。我不知道它是如何工作的,也不知道它为什么会工作,但它确实如此。问题是,图像被绘制了两次。一次在原始位置(在中心),一次在 (300,0)。

感谢您提供有关如何阻止它在原始位置绘制的任何反馈。如果您知道调整标签大小和位置的更简单方法,也请说出来。我没有使用 LayoutManager。

最佳答案

您为 JLabel 提供了一个 ImageIcon...

JLabel imageLabel = new JLabel(image)

但随后覆盖它的 paintComponent 方法并手动绘制它...

JLabel imageLabel = new JLabel(image){
@Override
public void paintComponent (Graphics g) {
super.paintComponent (g);
if (image != null) {
g.drawImage (image.getImage(), 300, 0, image.getIconWidth(), image.getIconHeight(), null);
}
}
};

...不太确定您预期会发生什么...

JLabel 是显示图像的默认方式。

调用drawImage时,您应该将this作为ImageObserver传递,这是所有Swing组件实现的,尤其是在使用ImageIcon<时 来加载图像,因为在组件首次绘制时图像可能尚未完成加载。使用 this 作为 ImageObserver 允许组件在图像加载状态发生变化时自动安排重绘

也许你应该仔细看看How to Use Labels

关于java - JLabel 被绘制了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com