我有一个swing组件,它绘制一个固定的大(但固定)矢量图像,并在图像的一部分上覆盖应相对于视口(而不是绝对位置)显示的文本-考虑一下excel中的冻结行标签(如下图所示) :
Header
-- [some stuff] ----- [ some stuff] ----
Header2
----- [some stuff] ----- [ some stuff] ----
除了向左滚动到右滚动之外,这都可以正常工作。我尝试在paintComponent()方法中将剪辑范围设置为可见区域,以便始终绘制整个视口-但这似乎不起作用:
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 - Java Swing Clipping问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4412190/