gpt4 book ai didi

java - 鼠标悬停触发 JXCollapsiblePane

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:31 25 4
gpt4 key购买 nike

在 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();
}
} );

关于java - 鼠标悬停触发 JXCollapsiblePane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com