2010-09-27 15 views

Trả lời

1

Làm thế nào về một cái gì đó như thế này:

DefaultListModel<String> myListModel = createStringListModel(); 
JList<String> myList = new JList<String>(myListModel); 
MyMouseAdaptor myMouseAdaptor = new MyMouseAdaptor(); 
myList.addMouseListener(myMouseAdaptor); 
myList.addMouseMotionListener(myMouseAdaptor); 

private class MyMouseAdaptor extends MouseInputAdapter { 
    private boolean mouseDragging = false; 
    private int dragSourceIndex; 

    @Override 
    public void mousePressed(MouseEvent e) { 
     dragSourceIndex = myList.getSelectedIndex(); 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     if (mouseDragging) {   
      int dragTargetIndex = myList.getSelectedIndex(); 
      String dragElement = myListModel.get(dragSourceIndex); 
      myListModel.remove(dragSourceIndex); 
      myListModel.add(dragTargetIndex, dragElement); 
     } 
     mouseDragging = false; 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) {    
     mouseDragging = true; 
    } 
} 

private DefaultListModel<String> createStringListModel() { 
    final String[] listElements = new String[] { "Cat", "Dog", "Cow", "Horse", "Pig", "Monkey" }; 
    DefaultListModel<String> listModel = new DefaultListModel<String>(); 
    for (String element : listElements) { 
     listModel.addElement(element); 
    } 
    return listModel; 
} 
5

Modified Jan Taccis câu trả lời:

public class DndTest extends JFrame { 

    JList<String> myList; 
    DefaultListModel<String> myListModel; 

    public DndTest() { 
     myListModel = createStringListModel(); 
     myList = new JList<String>(myListModel); 
     MyMouseAdaptor myMouseAdaptor = new MyMouseAdaptor(); 
     myList.addMouseListener(myMouseAdaptor); 
     myList.addMouseMotionListener(myMouseAdaptor); 

     JPanel content = new JPanel(); 
     content.add(myList); 
     this.add(content); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setVisible(true); 
    } 

    private class MyMouseAdaptor extends MouseInputAdapter { 
     private boolean mouseDragging = false; 
     private int dragSourceIndex; 

     @Override 
     public void mousePressed(MouseEvent e) { 
      if (SwingUtilities.isLeftMouseButton(e)) { 
       dragSourceIndex = myList.getSelectedIndex(); 
       mouseDragging = true; 
      } 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      mouseDragging = false; 
     } 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      if (mouseDragging) { 
       int currentIndex = myList.locationToIndex(e.getPoint()); 
       if (currentIndex != dragSourceIndex) { 
        int dragTargetIndex = myList.getSelectedIndex(); 
        String dragElement = myListModel.get(dragSourceIndex); 
        myListModel.remove(dragSourceIndex); 
        myListModel.add(dragTargetIndex, dragElement); 
        dragSourceIndex = currentIndex; 
       } 
      } 
     } 
    } 

    private DefaultListModel<String> createStringListModel() { 
     final String[] listElements = new String[] { "Cat", "Dog", "Cow", "Horse", "Pig", "Monkey" }; 
     DefaultListModel<String> listModel = new DefaultListModel<String>(); 
     for (String element : listElements) { 
      listModel.addElement(element); 
     } 
     return listModel; 
    } 

    public static void main(String[] args) { 
     new DndTest(); 
    } 
} 
0

Trong phương pháp sau đây có một lỗi logic trong nó bởi vì ngay sau khi nút chuột được phát hành, kéo phải dừng lại. Bằng ngôn ngữ đơn giản, điều kiện IF phải được phủ nhận đơn giản là

@Override 
    public void mouseReleased(MouseEvent e) { 
     if (!mouseDragging) {   
      int dragTargetIndex = myList.getSelectedIndex(); 
      String dragElement = myListModel.get(dragSourceIndex); 
      myListModel.remove(dragSourceIndex); 
      myListModel.add(dragTargetIndex, dragElement); 
     } 
     mouseDragging = false; 
    } 
Các vấn đề liên quan