簡體   English   中英

JPopup鍵綁定僅可使用1次

[英]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上運行。

非常感謝您的幫助,我確實在JTableJPopupMenu上使用了單獨的KeyListener來完成這項工作,但這意味着將所有快捷方式分配兩次,一次在彈出窗口上,然后一次為單獨的KeyListener分配。 在使它僅與JPopupMenu我現在希望能夠找出為什么快捷方式僅在顯示菜單之前(和期間)起作用。 即使我沒有在彈出菜單中單擊某個項目,在隱藏菜單后,快捷方式也將不起作用。

謝謝。

但是通過執行上述操作,盡管菜單將顯示快捷方式,但除非彈出菜單可見,否則快捷方式將永遠無法使用。

這是正確的行為。 加速器應僅在組件可見時才能工作。 因此,除非彈出窗口可見,否則加速器將無法工作。

如果您希望加速器一直工作,那么您應該使用JMenuBar和包含加速器的JMenus和JMenuItems。 我喜歡這種方法,因為如果為每個加速器提供了自我文檔。

或另一種方法是為所有加速器手動添加鍵綁定 這是實現JTable的所有默認Action的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM