プログラムでの座標の扱い方.行の左上の座標を取得

投稿者: | 2023年1月23日

Java – Viewport

定義:
(1)ビューポイントの基準点(表示されているテキストエリアの左上)の座標
(2)3行目のテキストの左上の座標

テキストエリアのテキストを(1)から3行目までスクロールさせたとき、(3)’ のラインと(3)のラインが重なるようにビューポイントを定義したいと思います。

このようにプログラムを定義すると、テキストエリア上で一行単位のスクロールを実現することができます。

そのためには、スクロールされたとき、4行目が(3)の位置までスクロールされた時に、その行の左上の座標(2)を取得する必要があります。

JViewport jv = this.scrollPane.getViewport();  
Point p = jv.getViewPosition();                      //4行目1文字目のどこかの座標が入ります。
int ptm = this.textArea.viewToModel(p);         //(2)の座標までの文字数(オフセットが入ります)
try{
   Rectangle mtv = this.textArea.modelToView(ptm);
        //取得したオフセットから、左上の座標を取得します。これが(2)です。
   System.out.println(“ChangeViewState” + p + ” ptm :”+ ptm + ” mtv:” + mtv.getX() + “, ” + mtv.getY());
   p.setLocation(mtv.getX(), mtv.getY());
   this.scrollPane.getViewport().setViewPosition(p);  //mtvの座標を新しいテキストエリアの表示位置に設定します。
}catch(Exception ex){
   ex.printStackTrace(); //例外対策※2
}

getViewPositionを実行した段階では、まだ左上の座標が取得できていません。そこで、

  1. viewToModelメソッドによりその1文字目のオフセットを取得する
  2. modelToViewメソッドにより項番1の文字の左上の座標を取得する

という処理を追加することで、(2)の座標が取得できるように補正しています。

※スクロールすると、その分大きくなります

※2代表例として、テキストエリアが空の場合、例外が起こります

この応用によって、行の左上の座標を取得できるようになります。(yet)

.net(C#, VB.net)

円弧の座標

http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html

カテゴリー: Java

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です