所以,我有一个网格布局,可以在每个单元格中存储JScrollPane。这些也被放入阵列用于其他目的。 “View”扩展了“JPanel”,因此它只是一个带图像支持的常规面板。应用程序启动时,单元格中填充了包含尚未显示图像的View的scrollPane。
此时我看不到滚动条,但这并不重要,因为JPanel中没有任何内容。一旦我打开图像并在JPanel的paintComponenet中使用drawImage,我就看不到滚动条显示了。这是我创建网格和Scrollpane
的方法private void createContentPane()
{
GridLayout gridLay = new GridLayout(GRID_ROWS, GRID_COLUMNS);
perspectiveTbl = new JScrollPane[NUM_PERSPECTIVE];
mainPane = new JPanel();
mainPane.setLayout(gridLay);
int idx = 0;
while(idx < perspectiveTbl.length)
{
perspectiveTbl[idx] = new JScrollPane(new View(modelImage));
mainPane.add(perspectiveTbl[idx]);
idx++;
}
this.getContentPane().add(mainPane, BorderLayout.CENTER);
}
我不确定为什么滚动条没有显示,如果它们已经设置在图像的面板内?
这是应用程序的图像,因为你可以看到鞋子的图片没有收到滚动条,所以没有办法查看图片的其余部分:
答案 0 :(得分:2)
您既可以使用带图像的JPanel,也可以使用带图像的常用JLabel
或
调用setPreferredSize()
以使面板反映图像的大小。
答案 1 :(得分:0)
感谢Stanislav的提示,我实际上已经弄明白了,并且在一小时前将其运行了,但是你确实给出了使用preferredSize属性修复它的正确途径。我最终使用面板内图像的大小重新实现了getPreferredSize,为paint事件添加了revalidate,以便在图像加载后立即显示条形。
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
this.getViewScrollPane().revalidate();
}
public Dimension getPreferredSize()
{
if(image != null)
return new Dimension(image.getWidth(),image.getHeight());
else
return super.getPreferredSize();
}