ugnagブログ

たいした内容はありません。思いつきで書いているだけ。
開発日記がメインかな。

<< JTableのセルカーソルの位置(その2) | main | JTableのセルカーソルの位置(その4) >>

JTableのセルカーソルの位置(その3)

第3回目。
さて、ActionMapに設定するActionオブジェクトの処理だが、

基本的には、


元々のActionオブジェクトの処理の実行前と実行後で、

セルカーソルの位置が変わっていたら、イベントを発生させる



という処理になる。


ただし、エンターキ/TABキーの場合、changeSelectionメソッドから発生するイベントと重複するケースがある。


どのような時に重複するか整理してみることにする。



前回のエンターキー/TABキーに関連するもので関係のありそうなキーワードとして次のものがある。


・範囲が選択されている状態で
・セルカーソルが選択範囲の外にある時に


※「範囲が選択されている状態で」というのは、行/列のどちらかが複数選択されている状態を指す。


この2つの状態で、イベントを発生させるかどうかをまとめると、


範囲が単数  & セルカーソルが範囲の中
→発生させない

範囲が単数  & セルカーソルが範囲の外
→発生させる

範囲が非単数  & セルカーソルが範囲の中
→発生させる

範囲が非単数  & セルカーソルが範囲の外
→発生させる


となる。


まとめると、

●エンターキー/TABキーの場合、

「範囲が単数でセルカーソルが範囲の中」以外の場合、
イベント発生処理実行。


●ctrl + カーソルキーの場合


イベント発生処理実行




※イベント発生処理
 
元々のActionオブジェクトの処理の実行前と実行後で、
セルカーソルの位置が変わっていた場合のみ、イベントを発生させる




となる。


エンターキー/TABキーとctrl+カーソルキーで処理を共通化できそうだ。
(ただし、条件分岐は必要)




新しいActionオブジェクトのactionPerformedの処理イメージは
次のような形だ。


・現状のセルカーソル位置を記憶
・元々のActionオブジェクトを実行
・イベント用処理


これを行うために、クラスをひとつ定義することにする。



class MultiAction extends AbstractAction
{
List actionListeners = new ArrayList<>();

String name =
JAVA | comments (0) | -

Comments

Comment Form

本文に書いて下さい
本文にh抜きで書いて下さい