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

标签 java swing jpanel jscrollpane paintcomponent

正如标题所示,我正在尝试在 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/

相关文章:

java - UiBinder 小部件中的自定义属性

java - HTML 中的代码和问号转换

Java全屏背景颜色不会改变?

Java GridBagLayout

java - 为zuul转发错误设置自定义错误

java - 在多个线程之间传递POJO(没有易失字段,同步方法)并确保更改可见的正确方法?

java - 如何使用 JLabel 显示 <(小于号)

java - 将 jTable 选择导出到 Excel 并打开 Excel

java - netBeans GUI 表单更改面板

Java-如何从 JPanel 中清除图形