gpt4 book ai didi

java - 强制显示 JLabel 子类

转载 作者:行者123 更新时间:2023-12-01 23:14:54 25 4
gpt4 key购买 nike

我有一个扩展 JLabel 的类,用于在标签的整个内部区域上显示图像。
为了实现这一点,我像这样覆盖paintComponent:

protected void paintComponent(Graphics g) {

super.paintComponent(g);

if(image != null) {
SwingUtilities.calculateInnerArea(this, innerArea);
g.drawImage(image, 0, 0, innerArea.width, innerArea.height, this);
}

}

我认为它应该使用构造函数来工作,如下所示:

public ImageLabel(String img) {

super();
this.image = new ImageIcon(this.getClass().getResource(img)).getImage();
repaint();

}

但我有一个问题,标签基本上没有大小,因为它没有实际内容。
当使用 super(""); 时,一切看起来都像我实际预期的那样。

现在我想知道 - 这是解决这个问题的合法方法还是我错过了其他(可能更好)的方法?

最佳答案

虽然从技术上讲,您可以JLabel上绘画,但最好在JPanel上绘画。您的代码似乎没问题,只需将其转换为 JPanel 即可。

"But there I have the issue, that the Label has basically no size, since it has no actual content."

绘画时,您也要记住重写getPreferredSize()。油漆并不是真正的内容,所以没有首选尺寸。它通过传递参数来工作的原因是,您传递给它的字符串是内容,这使得标签的首选大小与您传递给它的字符串相匹配。但就像我说的,使用像这样的 JPanel

public class ImagePanel extends JPanel {
private final int D_W = 400;
private final int D_W = 400;
private BufferedIMage imag;

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(D_W, D_H);
}
}

关于java - 强制显示 JLabel 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401030/

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