3

コンポーネントJTree全体ではなく、ノードのみを右クリックしてポップアップボックスを表示したい。JTreeユーザーが JTree ノードを右クリックすると、ポップアップ ボックスが表示されます。彼が空白スペースを右クリックしてもJTree、それは表示されません。JTreeそのために、ノードのみのマウスイベントを検出するにはどうすればよいですか。ネットで何度も検索しましたが、解決策が見つからなかったので、助けてください。

ありがとう。

4

2 に答える 2

13

簡単な方法は次のとおりです。

public static void main ( String[] args )
{
    JFrame frame = new JFrame ();

    final JTree tree = new JTree ();
    tree.addMouseListener ( new MouseAdapter ()
    {
        public void mousePressed ( MouseEvent e )
        {
            if ( SwingUtilities.isRightMouseButton ( e ) )
            {
                TreePath path = tree.getPathForLocation ( e.getX (), e.getY () );
                Rectangle pathBounds = tree.getUI ().getPathBounds ( tree, path );
                if ( pathBounds != null && pathBounds.contains ( e.getX (), e.getY () ) )
                {
                    JPopupMenu menu = new JPopupMenu ();
                    menu.add ( new JMenuItem ( "Test" ) );
                    menu.show ( tree, pathBounds.x, pathBounds.y + pathBounds.height );
                }
            }
        }
    } );
    frame.add ( tree );


    frame.pack ();
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}
于 2012-04-11T07:32:30.087 に答える