SwingのPaintの位置がなんかずれる
SwingのPaintの位置がなんかずれる。
そんな悩みをもったことのある日本全国3000万人の女子高生諸君。
僕も同じ悩みを持ちました。
今、自分で、Swing上で、Eclipseのdraw2d のような仕組みを作ってます。
JPanel を継承したオブジェクト(キャンバス)が1個あって、
その上に仮想的にエレメントといわれるものを自分で定義して、
キャンバスの paintComponent メソッドをオーバライドして、
各エレメントの描画メソッドを呼んでやる。
なんてなことをしてます。
そしたら、妙に各エレメントの描画が上方向にずれる・・・
という現象にはまり一日を無駄にしました。
結論としては、FontMetricsを取得しようしたりして、
Component#getGraphics するとずれる。
でした。
getGraphics の実装中に
g.translate(x,y);
というコードがあって、コンポーネントの x, y 座標に Graphics を
translate してました。
そりゃずれるわ!
各エレメントの範囲を判定するのに、
FontMetricsを利用してたんですが、
しょうがないので、
「FontMetricsがnullのときは・・・」って実装にして、
getGraphics は呼ばないように改造。
この記事が Swing でのズレに悩む全国の女子高生の役に立てば幸いです。