在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 );
}
}
谢谢,
最佳答案
当光标离开mouseExited
时,即通过离开JPanel
的边界或输入子组件之一来触发JPanel
事件。由于该按钮位于JPanel
的边缘上,因此光标永远不会在左途再次输入JPanel
,因此无法退出。
您可以修改按钮的mouseEntered
中的MouseListener
方法,以在控制面板打开时折叠控制面板,并让您现有的MouseListener
处理用户通过框架边框离开的情况。如果要防止用户追逐按钮并重新触发按钮,则需要跟踪控制面板的展开/折叠状态(SwingX API可能已经为您完成此操作)(我没有在代码中打扰以下)。
我修改的MouseListener:
toggle.addMouseListener( new MouseAdapter()
{
@Override
public void mouseEntered( MouseEvent e )
{
toggle.doClick();
}
} );