我正在使用Java教程中如何使用JScrollPane(带有行/列标题)的示例。该示例使用JLabel的子类来显示Viewport View中的图像。我使用了用于显示行/列标题的示例代码(Rule.java example code),并对奇怪的结果感到困惑。最终,我删除了调用getClipBounds()的代码(显然用于确定可见的行/列标题区域以仅绘制该区域),并绘制了整个标题,问题得到解决。这意味着我现在正在绘制整个区域(在行/列标题和主Viewport中)。这让我觉得不是最优化的。
- 有人能解释一下为什么Java教程示例可以正常工作吗(除了源代码与示例中执行的代码不同)?
- 即使只有部分可见,我是否应该绘制整个窗格?
- 如何确定Viewport中整个对象的哪个区域是可见的(对于行/列标题和主Viewport),以便只绘制该区域?
更新:
我仍然不知道为什么这个示例可以工作,但是我发现如果我使用JComponent.getVisibleRect()而不是Graphics.getClipBounds(),事情似乎按照预期工作。不确定这是否是该方法的正确使用。