PaintComponent在JScrollPane内的JPanel上没有按预期工作

时间:2014-04-21 01:52:19

标签: java swing jpanel jscrollpane paintcomponent

正如标题所示,我试图在JPanel内绘制JScrollPane(因为面板几乎总是溢出屏幕所以我需要能够滚动)。我有一个奇怪的问题,PaintComponent方法并没有像我预期的那样绘制。我目前只是尝试用纯色填充JPanel,但不是填充JPanel,而是实际上只绘制一个未填充的框,因为它部分填充但不完全。

JPanel的代码(请注意simPanel是JSCROLLPANE):

private class myPanel extends JPanel {
    @Override
    public void paintComponent (Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.fillRect(0, 0, simPanel.getWidth(), simPanel.getHeight());
    }
}

我的WindowResizeListener附加到JScrollPane本身并运行以下方法,到目前为止它似乎正在调整大小,因为我一直使用print语句来获取滚动窗格的大小,它是在调整应用程序大小时变得越来越大。

public void componentResized(ComponentEvent ce) {
    myJPanel.setSize(simPanel.getSize());
}

如果JPane未添加到JScrollPane(即它已添加到另一个JPanel或类似内容),但JScrollPane本身不会似乎想要正确地绘画。我想知道是否有我遗失的东西。看起来我JPanel的大小合适,因为在滚动窗格中,框是正确的大小,即使我正在调用fillRect,我也无法填充它。

编辑:我认为它可能与ScrollPane的大小有关。我现在正在弄乱不同的布局管理器,并注意到滚动窗格的尺寸非常不稳定,并且由于某种原因不断回到固定尺寸......

1 个答案:

答案 0 :(得分:1)

  

我的JPanel的代码(请注意simPanel是JSCROLLPANE):

JPanel的绘画代码不应该引用滚动窗格的大小。在任何情况下,您只需使用面板的setBackground(...)方法设置其背景颜色。

  

JScrollPane(因为面板几乎总是溢出屏幕所以我需要能够滚动)

当面板的preferredSize大于滚动窗格的大小时,滚动条将自动出现。面板的布局管理器负责确定面板的首选大小,因此您不需要任何自定义代码。