Java Swing Panel显示图像奇怪的行为

时间:2015-05-23 18:41:57

标签: java image swing jpanel

当我尝试在JFrame中的JPanel上渲染图像时,我不知道到底发生了什么。实际上我只想在我的JFrame上显示一个固定位置的图像。要实现这一点,我的JFrame上有一个固定大小的JPanel(min,max,pref size set)。按下按钮,我将另一个面板添加到提到的面板,具有相同的大小。 "孩子" panel有一个覆盖绘制方法来绘制图像。到目前为止一切顺利,一旦按下按钮并添加该子面板,根本没有任何反应。如果我然后单击空面板,图像将按原样绘制,而不是溢出子面板的边界。但是,所有其他组件的宽度都会急剧增加,从而将它们拉伸到JFrames范围之外。人们会认为至少会出现一个滚动条,但不会,这些组件就会无法触及。我附上两个显示非常逻辑行为的屏幕截图。

代码如下:

'b

Inside ImagePanel:

  void setPoster(BufferedImage poster) {
    ImagePanel ip = new ImagePanel(poster);
    ip.setSize(new Dimension(222, 327));
    panelPoster.add(ip);
    ip.setSize(new Dimension(222, 327));
}

截屏前:

enter image description here

截屏后:

enter image description here

有人可以告诉我这里可能发生的事情吗?

1 个答案:

答案 0 :(得分:0)

我通过在选项卡式窗格中的JFrame和JPanel上将布局设置为null来修复奇怪的大小调整。

    setLayout(null);
    jPanel4.setLayout(null);

无论如何,使用JLabel而不是JPanel来保存图像时不需要这样做。

但是,我的ImagePanel不会再绘制图像,所以我用JLabel替换它,它可以很好地绘制图像:

    void setPoster(BufferedImage poster) {
    JLabel imageLabel = new JLabel(new ImageIcon(poster));
    panelPoster.add(imageLabel);
    imageLabel.setSize(new Dimension(222, 327));
}

请注意,如果不设置JLabel的大小,它将无法显示任何内容。