我有一个 swing 组件,它绘制一个固定的大(但固定) vector 图像,并用应该相对于视口(viewport)(而不是绝对位置)显示的文本覆盖图像的一部分 - 想想 Excel 中的卡住行标签(如下图所示):
Header
-- [some stuff] ----- [ some stuff] ----
Header2
----- [some stuff] ----- [ some stuff] ----
除非从左向右滚动,否则效果很好。我尝试在 PaintComponent() 方法中将剪辑边界设置为可见区域,以便始终绘制整个视口(viewport) - 但这似乎不起作用:
public void paintComponent(Graphics graphics) {
Graphics2D g = (Graphics2D)graphics;
Shape oldClip = g.getClip();
Rectangle clipBounds = getVisibleRect();
g.setClip(clipBounds);
drawMyImage();
drawMyHeaders();
g.setClip(oldClip);
}
但是,这似乎不起作用,我看到可见区域的形状是正确的,但设置剪辑没有效果。我能做什么?
clip: java.awt.Rectangle[x=1762,y=0,width=57,height=182] // clipped while scrolling
vis: java.awt.Rectangle[x=1762,y=0,width=582,height=182] // what I want to paint
最佳答案
您没有将图形对象传递到标题中,因此它们必须通过其他可能不会设置剪切形状的东西进行绘制。
正如评论所述,不要在paintComponent中使用setClip!剪切区域由 Swing 使用。
看来您想要做的是在滚动组件上方放置一个覆盖组件。
关于java swing 裁剪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412190/