固定された大きな(しかし固定された)ベクトルイメージを描画し、ビューポート(絶対位置ではない)に対して相対的に表示するテキストのイメージをオーバーレイするスイングコンポーネントがあります。エクセル(下記に示す)内のラベル:java swingのクリッピングの問題
Header
-- [some stuff] ----- [ some stuff] ----
Header2
----- [some stuff] ----- [ some stuff] ----
これは、左から右にスクロールしたときを除いて正常に動作します。
public void paintComponent(Graphics graphics) {
Graphics2D g = (Graphics2D)graphics;
Shape oldClip = g.getClip();
Rectangle clipBounds = getVisibleRect();
g.setClip(clipBounds);
drawMyImage();
drawMyHeaders();
g.setClip(oldClip);
}
はしかし、これは動作するようには思えません。しかし、これは動作するように表示されません - 私は、ビューポート全体が常に描かれているように、paintComponent()メソッドでは、可視光領域にクリップの境界を設定しよう可視領域が正しい形状であることがわかりますが、クリップを設定しても効果はありません。私に何ができる?
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によって使用されます。 –
明らかに私はより良いアプローチを求めていますが、可視領域に描画を設定してから復元することは害ではありません。スイングは、スクロール中にクリップが汚れた領域に固くセットされているように見えますが、おそらくグラフィックスのサブコンテキストを提供しています。 – Justin