有一个我不明白的问题:如果drawImage()
的布局是JFrame
或{{1},为什么我能够使用BorderLayout
方法绘制图像但不是GridLayout
,GridbagLayout
或FlowLayout
?有人可以向我解释一下吗?
以下是代码:
BoxLayout
答案 0 :(得分:3)
因为前两个布局,JLabel将填充容器,这里是JPanel。对于其他布局,它将调整为preferredSize的大小为0.如果您希望使用其他布局,请考虑覆盖getPreferredSize。
另请注意:
修改强>
例如,像这样:
private class TransparentBG extends JLabel {
BufferedImage image;
public TransparentBG() throws IOException {
image = ImageIO.read(TransparentBG.class.getClassLoader()
.getResourceAsStream("footballQuestioner/rightAnswerSign.png"));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if (image != null) {
g2d.drawImage(image, 0, 0, null);
}
// g2d.dispose();
}
@Override
public Dimension getPreferredSize() {
if (image != null) {
int w = image.getWidth();
int h = image.getHeight();
return new Dimension(w, h);
}
return super.getPreferredSize();
}
}