您好我的JPanel不会在x中重新绘制/调整大小,但仅适用于y。 我无法弄清楚原因。
这是我的JPanel。
public class ImagePanel extends JPanel {
private BufferedImage image;
public ImagePanel(String path) {
try {
image = ImageIO.read(new File(path));
this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
} catch (IOException ex) {
// handle exception...
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 0, 0,getWidth(), getHeight(), this);
}
}
这是我将它添加到JFrame的方式:
ImagePanel westPanel = new ImagePanel("pic.PNG");
frame.add(westPanel, BorderLayout.WEST);
.
.
// adding a JTabel in BorderLayout.CENTER and some buttons and stuff in NORTH and SOUTH
.
.
frame.pack();
是因为它必须位于帧borderlayout的CENTER中吗?或者可以在WEST中完成吗?
答案 0 :(得分:3)
this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
不要设置首选尺寸。
改为覆盖getPreferredSize()
方法:
@Override
public Dimension getPreferredSize()
{
return new Dimension(image.getWidth(), image.getHeight());
}
是因为它必须位于帧borderlayout的CENTER中吗?或者可以在WEST中完成吗?
如果图像被添加到CENTER,那么图像将是帧可用空间的大小,因此水平和垂直都将调整大小。
如果将图像添加到WEST,则布局会考虑宽度,并且仅调整高度以填充框架的高度。所以,是的,将图像添加到WEST可能是导致问题的原因。
阅读Using Layout Manager上Swing教程中的部分,了解有关约束如何影响每个布局管理器布局的更多信息。
如果您需要更多帮助,请发布展示问题的正确SSCCE。