JPanel以y(高度)重新绘制/调整大小,但不以x(宽度)重新调整大小,为什么会这样?

时间:2015-11-07 03:24:53

标签: java swing

您好我的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中完成吗?

1 个答案:

答案 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