正如标题所示,我正在尝试在 JScrollPane
内的 JPanel
上绘制(因为面板几乎总是溢出屏幕,所以我需要能够滚动)。我遇到了一个奇怪的问题,因为 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 语句来获取大小滚动 Pane 的大小,当我调整应用程序大小时,它会变得更大/更小。
public void componentResized(ComponentEvent ce) {
myJPanel.setSize(simPanel.getSize());
}
如果 JPane
l 未添加到 JScrollPane
(即,它被添加到另一个 JPanel
或类似的),那么这将按预期工作,但是JScrollPane
本身似乎并不想正确绘制。我想知道我是否缺少什么。看起来我的 JPanel
大小正确,因为滚动 Pane 本身的框大小正确,即使我调用 fillRect
,我也无法填充它。
编辑:我认为这可能与 ScrollPane 的大小有关。我现在正在摆弄不同的布局管理器,并注意到滚动 Pane 的大小非常不稳定,并且由于某种原因不断移回到固定大小......
最佳答案
The code for my JPanel (PLEASE NOTE simPanel IS THE JSCROLLPANE):
JPanel 的绘制代码不应引用滚动 Pane 的大小。在任何情况下,您只需使用面板的 setBackground(...)
方法来设置其背景颜色。
JScrollPane (as the panel will almost always overflow the screen so I need to be able to scroll)
当面板的preferredSize大于滚动 Pane 的大小时,滚动条将自动出现。面板的布局管理器负责确定面板的首选尺寸,因此您不需要任何自定义代码。
关于java - PaintComponent 无法在 JScrollPane 内的 JPanel 上按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189685/