java swing剪切问题

时间:2010-12-10 18:45:55

标签: java swing scroll

我有一个摆动组件,它绘制一个固定的大(但固定)矢量图像,并覆盖图像的一部分,文本应显示相对于视口(而不是绝对位置) - 想想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

1 个答案:

答案 0 :(得分:2)

您没有将图形对象传递到标题中,因此它们必须通过其他可能没有裁剪形状设置的东西进行绘画。

如评论所述,不要在paintComponent中使用setClip!剪切区域由Swing使用。

你想要做的就是在滚动组件上方分层叠加组件。