在开始之前,让我说我是Java的新手。我为自己的无知而事先道歉。
所以,我创建了一个JFrame,将图像作为ImageIcon加载,并将其转换为JLabel,我将其添加到Frame中。问题是,控制标签的大小和位置是一种痛苦。
我找到了这个解决方案:
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。
答案 0 :(得分:4)
您为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
作为所有Swing组件实施的ImageObserver
,特别是在使用ImageIcon
加载图片时,因为图片可能不会在组件首次涂漆时已完成装载。使用this
作为ImageObserver
允许组件在图像加载状态发生变化时自动安排重新绘制
也许你应该仔细看看How to Use Labels
答案 1 :(得分:1)
我没有评论的声誉,所以我回答。
问题是当您创建
时,中心的图像是JLabel图像Jlabel imageLabel = new JLabel(**image**)
只需像这样
创建此图像JLabel imageLabel = new JLabel(){...}
答案 2 :(得分:0)
只需删除paintComponent
方法即可。您已将图像添加到标签中。
你应该尽量避免使用你不了解的代码,或者在询问之前尝试了解发生的事情,尽量不要说:
我不知道它的工作原理或工作原理,但确实如此。
这不是一个好的编程实践。