2012-07-03 35 views
5

Trong các ví dụ về SwingX mà JXCollapsiblePane được sử dụng với một nút, nhưng tôi muốn chuyển nó bằng các sự kiện chuột. Trong ví dụ của tôi, JXCollapsiblePane đóng cửa ngay từ đầu. Chỉ khi người dùng đi kèm với con chuột trên nút để mở JXCollapsiblePane. Khi chuột rời khỏi khu vực, đó là vụ JXCollapsiblePane sụp đổ một lần nữa. Vấn đề của tôi: JXCollapsiblePane không bị sập, khi chuột rời khỏi khu vực thông qua nút.Kích hoạt JXCollapsiblePane bằng chuột trên

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

    } 
} 

Cảm ơn,

+0

Hey bạn có biết làm thế nào để thiết lập sự chỉ đạo của các hình ảnh động chuyển đổi? – mayooran

Trả lời

4

Sự kiện mouseExited được kích hoạt khi con trỏ rời JPanel - hoặc bằng cách rời khỏi bờ cõi của các JPanel hoặc bằng cách nhập một trong những thành phần phụ. Bởi vì nút nằm ngay trên cạnh của JPanel, con trỏ không bao giờ nhập lại JPanel trên đường bên trái và do đó không thể thoát khỏi nút đó.

Bạn có thể thay đổi phương pháp mouseEntered vào những năm MouseListener nút để đóng bảng điều khiển nếu nó đang mở và để hiện MouseListener xử lý các trường hợp người dùng rời khỏi qua biên giới khung của bạn. Bạn cần phải theo dõi trạng thái mở rộng/thu gọn của ngăn điều khiển (API SwingX có thể thực hiện điều này cho bạn) nếu bạn muốn ngăn người dùng theo dõi nút và kích hoạt lại nó (tôi không bận tâm đến mã phía dưới).

MouseListener sửa đổi của tôi:

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

bạn có thể giúp gì cho câu hỏi này không? http://stackoverflow.com/questions/36811734/collapsing-pane-and-table-using-swingx – mayooran

Các vấn đề liên quan