加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 用鼠标悬停触发JXCollapsiblePane

发布时间:2020-12-14 19:20:11 所属栏目:Java 来源:网络整理
导读:在SwingX的例子中,JXCollapsiblePane与按钮一起使用,但我想用鼠标事件转置它. 在我的示例中,JXCollapsiblePane在开始时关闭.只有当用户在按钮上附带鼠标才能打开JXCollapsiblePane.当鼠标离开该区域时,假设JXCollapsiblePane再次崩溃. 我的问题:当鼠标通过

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

public class CollapsiblePaneDemo
{

  /**
   * @param args
   */
  public static void main( String[] args )
  {
    final JXCollapsiblePane cp = 
        new JXCollapsiblePane( JXCollapsiblePane.Direction.RIGHT );

    // JXCollapsiblePane can be used like any other container
    cp.setLayout( new BorderLayout() );

    // the Controls panel with a textfield to filter the tree
    JPanel controls = new JPanel( new FlowLayout( FlowLayout.LEFT,4,0 ) );
    controls.add( new JLabel( "Search:" ) );
    controls.add( new JTextField( 10 ) );
    controls.add( new JButton( "Refresh" ) );
    controls.setBorder( new TitledBorder( "Filters" ) );

    cp.add( "Center",controls );

    JXFrame frame = new JXFrame();
    frame.setLayout( new BorderLayout() );

    // Then the tree - we assume the Controls would somehow filter the tree
    JScrollPane scroll = new JScrollPane( new JTree() );
    // Put the "Controls" first
    frame.add( "Center",scroll );


    // Show/hide the "Controls"
    final JButton toggle = new JButton( cp.getActionMap()
        .get( JXCollapsiblePane.TOGGLE_ACTION ) );
    toggle.setText( "-" );
    toggle.setPreferredSize( new Dimension( 20,toggle.getSize().height ) );

    toggle.addMouseListener( new MouseAdapter()
    {
      @Override
      public void mouseEntered( MouseEvent e )
      {
        if ( cp.getSize().width == 0 )
        {

          toggle.doClick();
        }
      }
    } );

    final JPanel panel = new JPanel();
    panel.setLayout( new BorderLayout() );
    panel.add( "Center",toggle );
    panel.add( "East",cp );

    panel.addMouseListener( new MouseAdapter()
    {
      @Override
      public void mouseExited( MouseEvent e )
      {
        if ( !panel.contains( e.getPoint() ) )
        {
          toggle.doClick();
        }
      }
    } );

    frame.add( "East",panel );

    frame.setDefaultCloSEOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();
    cp.setCollapsed( true );
    frame.setVisible( true );

  }
}

谢谢,

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

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

我修改过的MouseListener:

toggle.addMouseListener( new MouseAdapter()
{
  @Override
  public void mouseEntered( MouseEvent e )
  {
      toggle.doClick();
  }
} );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读