java swing 裁剪问题

标签 java swing scroll

我有一个 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/

相关文章:

Java 如何禁用 JTable 单击时可编辑

C# 在 Windows 窗体中滚动面板

c++ - 在 Qt 中滚动滚动区域

java - java中参数化类型的打印值

响应指标的 JavaFX 场景图修改

java - 增加 Gridlayout 中的行大小

android - 为什么我的 scrollHorizo​​ntally 不起作用?

JAVA 将对象转换为 ArrayList 不起作用

java - 如何使用 java.nio.ByteBuffer 从 C++ 返回到 Java

java - 使用 jcombobox 在 java 中过滤国家/地区-州-城市代码