2012-07-03 30 views
5

JXCollapsiblePaneをボタンで使用するSwingXの例では、マウスイベントで転置したいと思っています。 私の例では、JXCollapsiblePaneは最初は閉じています。ユーザーがボタンをマウスでクリックしてJXCollapsiblePaneを開くときのみ。マウスが領域を離れると、JXCollapsiblePaneが再び崩壊すると考えられます。 問題:JXCollapsiblePaneは、マウスがボタンから領域を離れるときに折りたたまれません。トリガーJXCollapsiblePane with mouse over

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); 

    } 
} 

おかげで、

+0

ねえ、あなたがトグルアニメーションの方向を設定する方法を知っていますか? – mayooran

答えて

4

カーソルがJPanelを離れるとmouseExitedイベントがトリガされた - JPanelの境界を残すことによって、またはサブコンポーネントのいずれかを入力することによってのいずれか。ボタンがJPanelの端にあるため、カーソルは左の道で再びJPanelに入らず、終了できません。

あなたはそれが開いている場合、コントロールパネルを折りたたむと、既存のMouseListenerは、ユーザーがフレームの境界線を通じて去るケースを処理できるようにボタンのMouseListenermouseEntered方法を変更することができます。ユーザーがボタンを追いかけるのを防ぐために、コントロールペインの拡大/折りたたみ状態を追跡する必要があります(SwingX APIはおそらくこれを行います)以下)。

マイ修正のMouseListener:

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

お元気ですか? http://stackoverflow.com/questions/36811734/collapsing-pane-and-table-using-swingx – mayooran