2012-07-03 18 views
5

En los ejemplos de SwingX que JXCollapsiblePane se usa con un botón, pero quiero transponerlo con eventos de mouse. En mi ejemplo, JXCollapsiblePane está cerrado al principio. Solo cuando el usuario viene con el mouse sobre el botón para abrir el JXCollapsiblePane. Cuando el mouse abandona el área, se supone que JXCollapsiblePane colapsa de nuevo. Mi problema: El JXCollapsiblePane no está contraído, cuando el mouse sale del área mediante el botón.Disparador JXCollapsiblePane con mouse sobre

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

    } 
} 

Gracias,

+0

Hey ¿sabe cómo configurar la dirección de la animación de palanca? – mayooran

Respuesta

4

El evento mouseExited se activa cuando el cursor sale de la JPanel - ya sea dejando los límites de la JPanel o mediante la introducción de uno de los subcomponentes. Como el botón está justo en el borde del JPanel, el cursor nunca entra en el JPanel nuevamente en el camino hacia la izquierda y, por lo tanto, no puede salir de él.

podrá modificar el método de mouseEntered en MouseListener el botón para contraer el panel de control si está abierto y dejar que su existente MouseListener manejar el caso en que el usuario sale por el borde del marco. Necesitas hacer un seguimiento del estado de expansión/colapso del panel de control (la API SwingX probablemente ya lo haga por ti) si quieres evitar que el usuario persiga el botón y lo vuelva a activar (no me molesté en el código). abajo).

Mi MouseListener modificación:

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

hey me pueden ayudar con esta pregunta? http://stackoverflow.com/questions/36811734/collapsing-pane-and-table-using-swingx – mayooran

Cuestiones relacionadas