JPopupMenu
私は作成してキーバインディングを割り当てる静的を持っています:
JMenuItem mItem = new MenuItem( "name" );
mItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_W, ActionEvent.CTRL_MASK ) );
これは、次のようにして にJPopupMenu
追加されます。JTable
JTable table = new JTable();
table.add( popupMenu );
MouseListener
ポップアップ メニューをトリガーするために、にも を追加しJTable
ます。
table.addMouseListener( mListener );
mouseReleased( MouseEvent me )
次の方法で、ポップアップ メニューを表示するためのアクションを追加するためにオーバーライドします。
private void checkPopupTrigger( MouseEvent me )
{
if ( me.isPopupTrigger() )
{
JTable source = (JTable)me.getSource();
int row = source.rowAtPoint( me.getPoint() );
int column = source.columnAtPoint( me.getPoint() );
if (! source.isRowSelected(row))
source.changeSelection(row, column, false, false);
popupMenu.show( me.getComponent(), me.getX(), me.getY() );
}
}
私が抱えている問題は、最初のロード時にショートカットが正常に機能し、JPopupMenu を開かなくても機能するため、押したいショートカットが既にわかっている場合は右クリックしてメニューを表示する必要がないことです。右クリックしてポップアップ メニューが表示されると、ポップアップ メニューが表示されなくなるとショットカットが機能しなくなります。
インスタンスを (Eclipse IDE で) 調べるJTable
と、実際にはJPopupMenu
、次の行が呼び出された後にコンポーネントがテーブルから削除されているように見えます。
popupMenu.show( me.getComponent(), me.getX(), me.getY() );
この動作には理由がありますか? さまざまなアプローチの後、何が起こっているのかを知ることができないようです。私も使用してみました:
table.setComponentPopupMenu(myPopupMenu);
しかし、上記を実行すると、メニューは表示されますが、ポップアップメニューが表示されていない限り、ショートカットは機能しません。
それが割り当てられたキーバインディングに関連している可能性がある場合、私はWindows 8で実行しています。
と同様にセパレートを使用してこれを機能KeyListener
させましたが、それはすべてのショートカットを2回、ポップアップで1回、セパレートでもう一度割り当てることを意味しました。だけで動作するようになった後、メニューが表示される前(および表示中)にのみショートカットが機能する理由を見つけられることを願っています。ポップアップ メニューの項目をクリックしなくても、メニューが非表示になるとショートカットが機能しません。JTable
JPopupMenu
KeyListener
JPopupMenu
ありがとうございました。