3

所以,我有一个网格布局,将 JScrollPane 存储在每个单元格中。这些也出于其他目的放入数组中。“视图”扩展了“JPanel”,因此它只是一个支持图像的常规面板。应用程序以充满滚动窗格的单元格启动,其中包含还没有图像的视图。

那时我看不到滚动条,但这没关系,因为 JPanel 内没有任何内容。一旦我打开图像并在 JPanel 的paintComponenet 中使用 drawImage,我就看不到滚动条出现。这是我创建网格和滚动窗格的方法

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);
}

我不完全确定为什么滚动条没有出现,是否应该在图像面板内设置它们?

这是应用程序的图像,您可以看到鞋子的图片没有收到滚动条,因此无法查看图片的其余部分:

图片

4

2 回答 2

2

您可以使用不是带有图像的 JPanel,而是使用带有图像的普通 JLabel

或者

要求setPreferredSize()面板反映图像的大小。

于 2011-11-30T17:10:36.010 回答
0

感谢 Stanislav 的提示,我实际上在一小时前想通了并让它工作了,但你确实给出了使用 preferredSize 属性修复它的正确路径。我最终使用面板内图像的大小重新实现了 getPreferredSize,将重新验证添加到绘制事件中,以便在加载图像后立即显示条形图。

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();
}
于 2011-12-01T01:12:07.693 回答