[英]JPopup key bindings only work 1 time
我有一個靜態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 );
我還向JTable
添加了一個MouseListener
來觸發彈出菜單:
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即可使用,因此,如果您已經知道要按的快捷方式,則無需右鍵單擊並顯示菜單。 如果我右鍵單擊並顯示彈出菜單,則一旦不顯示彈出菜單,快捷鍵將不再起作用。
如果我檢查我的JTable
實例(在Eclipse IDE中),則實際上似乎是在調用以下行后從表中刪除了JPopupMenu
組件:
popupMenu.show( me.getComponent(), me.getX(), me.getY() );
有這種行為的原因嗎? 我似乎無法找出各種不同方法后的情況。 我也嘗試過使用:
table.setComponentPopupMenu(myPopupMenu);
但是通過執行上述操作,盡管菜單將顯示快捷方式,但除非彈出菜單可見,否則快捷方式將永遠無法使用。
如果這可能與分配的按鍵綁定有關,則我正在Windows 8上運行。
非常感謝您的幫助,我確實在JTable
和JPopupMenu
上使用了單獨的KeyListener
來完成這項工作,但這意味着將所有快捷方式分配兩次,一次在彈出窗口上,然后一次為單獨的KeyListener
分配。 在使它僅與JPopupMenu
我現在希望能夠找出為什么快捷方式僅在顯示菜單之前(和期間)起作用。 即使我沒有在彈出菜單中單擊某個項目,在隱藏菜單后,快捷方式也將不起作用。
謝謝。
但是通過執行上述操作,盡管菜單將顯示快捷方式,但除非彈出菜單可見,否則快捷方式將永遠無法使用。
這是正確的行為。 加速器應僅在組件可見時才能工作。 因此,除非彈出窗口可見,否則加速器將無法工作。
如果您希望加速器一直工作,那么您應該使用JMenuBar和包含加速器的JMenus和JMenuItems。 我喜歡這種方法,因為如果為每個加速器提供了自我文檔。
或另一種方法是為所有加速器手動添加鍵綁定 。 這是實現JTable的所有默認Action的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.