java – 用鼠标悬停触发JXCollapsiblePane

前端之家收集整理的这篇文章主要介绍了java – 用鼠标悬停触发JXCollapsiblePane前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在SwingX的例子中,JXCollapsiblePane与按钮一起使用,但我想用鼠标事件转置它.
在我的示例中,JXCollapsiblePane在开始时关闭.只有当用户在按钮上附带鼠标才能打开JXCollapsiblePane.当鼠标离开该区域时,假设JXCollapsiblePane再次崩溃.
我的问题:当鼠标通过按钮离开区域时,JXCollapsiblePane没有折叠.

  1. public class CollapsiblePaneDemo
  2. {
  3. /**
  4. * @param args
  5. */
  6. public static void main( String[] args )
  7. {
  8. final JXCollapsiblePane cp =
  9. new JXCollapsiblePane( JXCollapsiblePane.Direction.RIGHT );
  10. // JXCollapsiblePane can be used like any other container
  11. cp.setLayout( new BorderLayout() );
  12. // the Controls panel with a textfield to filter the tree
  13. JPanel controls = new JPanel( new FlowLayout( FlowLayout.LEFT,4,0 ) );
  14. controls.add( new JLabel( "Search:" ) );
  15. controls.add( new JTextField( 10 ) );
  16. controls.add( new JButton( "Refresh" ) );
  17. controls.setBorder( new TitledBorder( "Filters" ) );
  18. cp.add( "Center",controls );
  19. JXFrame frame = new JXFrame();
  20. frame.setLayout( new BorderLayout() );
  21. // Then the tree - we assume the Controls would somehow filter the tree
  22. JScrollPane scroll = new JScrollPane( new JTree() );
  23. // Put the "Controls" first
  24. frame.add( "Center",scroll );
  25. // Show/hide the "Controls"
  26. final JButton toggle = new JButton( cp.getActionMap()
  27. .get( JXCollapsiblePane.TOGGLE_ACTION ) );
  28. toggle.setText( "-" );
  29. toggle.setPreferredSize( new Dimension( 20,toggle.getSize().height ) );
  30. toggle.addMouseListener( new MouseAdapter()
  31. {
  32. @Override
  33. public void mouseEntered( MouseEvent e )
  34. {
  35. if ( cp.getSize().width == 0 )
  36. {
  37. toggle.doClick();
  38. }
  39. }
  40. } );
  41. final JPanel panel = new JPanel();
  42. panel.setLayout( new BorderLayout() );
  43. panel.add( "Center",toggle );
  44. panel.add( "East",cp );
  45. panel.addMouseListener( new MouseAdapter()
  46. {
  47. @Override
  48. public void mouseExited( MouseEvent e )
  49. {
  50. if ( !panel.contains( e.getPoint() ) )
  51. {
  52. toggle.doClick();
  53. }
  54. }
  55. } );
  56. frame.add( "East",panel );
  57. frame.setDefaultCloSEOperation( JFrame.EXIT_ON_CLOSE );
  58. frame.pack();
  59. cp.setCollapsed( true );
  60. frame.setVisible( true );
  61. }
  62. }

谢谢,

最佳答案
当光标离开JPanel时,会触发mouseExited事件 – 通过离开JPanel的边界或输入其中一个子组件.由于该按钮位于JPanel的边缘,因此光标永远不会在左侧进入JPanel,因此无法退出.

您可以修改按钮的MouseListener中的mouseEntered方法,以便在控制面板打开时折叠控制面板,让现有的MouseListener处理用户离开框架边框的情况.你需要跟踪控制窗格的扩展/折叠状态(SwingX API可能已经为你做了)如果你想阻止用户追逐按钮并重新触发它(我没有在代码中烦恼下面).

修改过的MouseListener:

  1. toggle.addMouseListener( new MouseAdapter()
  2. {
  3. @Override
  4. public void mouseEntered( MouseEvent e )
  5. {
  6. toggle.doClick();
  7. }
  8. } );

猜你在找的Java相关文章