gpt4 book ai didi

java - PaintComponent 无法在 JScrollPane 内的 JPanel 上按预期工作

转载 作者:行者123 更新时间:2023-12-01 13:06:58 25 4
gpt4 key购买 nike

正如标题所示,我正在尝试在 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());
}

如果 JPanel 未添加到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com