dポイントプレゼントキャンペーン実施中!

Swingを勉強しているのですが
どのコンポーネントでクリックされたか判定する方法はないでしょうか。

具体的にはJTableの1列目で右クリックすると
add
delete
2列目で右クリックすると
clear
のように列ごとにポップアップメニューを変更したいのですが可能でしょうか。

よろしくお願いします。

A 回答 (2件)

1.まずJTableにaddMouseListenerでマウスリスナーを登録します。



2.リスナーのmouseClickedイベントでは次のような処理にします。

public void mouseClicked(MouseEvent e){

 Object sourceObject = e.getSource();


 if(sourceObject instanceof JTable){

  //そのプラットフォームのポップアップメニュートリガーイベントであるかどうか
  if(e.isPopupTrigger() ){

   //イベント発生元のJTable
   JTable jtable = (JTable)sourceObject;

   //クリックされた座標をPointオブジェクトで取得
   Point point = e.getPoint();

   //マウスがクリックされた列のインデックスを取得
   int columnIndex = jtable.columnAtPoint(point);

   //マウスがクリックされた行のインデックスを取得
   int rowIndex = jtable.rowAtPoint(point);

   //何かの処理
  }
 }

}


・何をしているかわかりやすいように、順を追ったコードにしました。

・「列」の判定で何かをしたいのであれば、columnIndexを使えば行えます。

※参考のために「行」の取得も行っています


・マウスボタンの判定はisPopupTrigger()で行っていますが、気に入らなければ
 getButton() などで判定してください。

・ダブルクリックなどクリック数の判定を加えたければgetClickCount() で判定できます。
    • good
    • 0

ActionListner を JTableに登録しているということでよいのかな?


イベントが発生すると public void actionPerformed(ActionEvent ev) メソッドが呼び出されるが、この引数evには、呼び出し元が記憶されているので、以下のように切り分け可能。

Object src = ev.getSource();
if( src instanceof JTable){
int column_num = ((JTable)src).getSelectedColumn();
switch(column_num){
case 0: /* 1列目のときの処理, 配列添え字と同じく0番開始なので。 */
break;
case 1: /* 2列目のときの処理 */
break;
default : /* その他の列、または どの列も選択されていない時 */
}
}

あと、右クリックか左クリックかの識別を先にしておくことでできるでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!