2014-04-21 13 views
0

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

JPanel代码(请注意simPanel IS THE 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语句来获取scrollpane的大小,并且在调整应用程序大小时它正变得越来越大/越来越小。

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

这工作按预期如果JPane升不添加到JScrollPane(即它被添加到另一个JPanel或类似),但JScrollPane本身似乎并不想正确地作画。我想知道是否有我缺少的东西。它看起来像我的JPanel是正确的大小,因为该框是在滚动窗格中的正确大小本身我不能填充它,即使我打电话给fillRect

编辑:我认为这可能与ScrollPane的大小有关。我瞎搞与不同的布局管理器的时刻,并注意到,滚动窗格很气质,其规模和不断搬回固定大小因某种原因......

+0

为了尽快获得更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可验证示例)。 –

回答

1

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

你的JPanel的绘画代码不应该引用滚动窗格的大小。无论如何,您只需使用面板的setBackground(...)方法来设置其背景颜色。

JScrollPane中(如面板几乎总是超出屏幕的显示,所以我需要能够滚动)

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