我希望这个ImagePanel
类显示一个非常高的图像,所以我把它放在JScrollPane
中。有趣的是,当我将ImagePanel
添加到JFrame
时,它会显示图像,但滚动条不存在,并且无法滚动(也不能使用鼠标)
当我写它时,它扩展JFrame
更容易过度,因为我需要它的程序中的部分需要一些时间才能到达,这个类有很多方法可以在图片上绘制。作为JFrame
它按预期工作。
另一个问题是,我尝试了一些确保宽度足以显示图像的东西,但setSize(image.getWidth(), something)
和setPreferedSize
都没有。我的情况是相关的我添加ImagePanel
就像这样:
all.add(imagePanel, BorderLayout.CENTER);
all.add(contentbox, BorderLayout.EAST);
到JFrame
,所以它应该伸展,但由于某些原因不起作用。内容框包含ContentPanes
,我没有停用LineWarp
因此它应该为imagePanel
留出空间(这不是我无法看到滚动条的原因,我试过了它在空JFrame
上,两边都有空间^^)
public class ImagePanel extends JPanel {
JLabel imageContainer;
ImageIcon icon;
BufferedImage image;
JScrollPane scroll;
Graphics g;
public ImagePanel (String cName) {
super();
File cFile = new File(cName);
try {
this.image = ImageIO.read(cFile);
} catch (IOException ex) {
ex.printStackTrace();
}
g = image.getGraphics();
g.setColor(Color.black);
icon = new ImageIcon(image);
imageContainer = new JLabel(icon);
scroll = new JScrollPane(imageContainer);
add(scroll);
}
}
答案 0 :(得分:1)
您的ImagePanel使用JPanel的默认FlowLayout,这可能是您的问题的根源,因为FlowLayouts可以允许比它们更大的组件而不显示整个组件。要对此进行测试,请让您的ImagePanel使用BorderLayout,并将JLabel添加到它BorderLayout.CENTER
,以便它填充ImagePanel。或者,您可以完全摆脱ImagePanel,只返回保存JLabel的JScrollPane。