Tôi có một JList và muốn người dùng có thể sắp xếp lại các phần tử trong danh sách bằng cách kéo-thả (sử dụng ListModel và ListCellRenderer của riêng tôi, nếu có). Tôi cần tạo đối tượng nào và cách xử lý tác vụ?Làm thế nào để cho phép kéo và thả bên trong JList
8
A
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
- 1. Độ cao UAC không cho phép kéo và thả
- 2. Kéo và thả WinForms để kéo và thả WPF
- 3. Kéo và thả trong MobileSafari?
- 4. Kéo và thả đối tượng tùy chỉnh từ JList vào JLabel
- 5. JTable - kéo và thả
- 6. Kéo và thả trong NSCollectionView
- 7. ItemsControl Kéo và Thả
- 8. Kéo và thả trong GUI
- 9. kéo và thả ipad
- 10. Kéo và thả jQuery - kiểm tra để thả bên ngoài một giọt có thể rơi xuống
- 11. Các nút Kéo và Thả trong JTree
- 12. Kéo và thả hình ảnh Java trong danh sách
- 13. Kéo và thả trong MVVM với ScatterView
- 14. Cho phép kéo và thả vào Visual Studio 2008 từ Windows Explorer
- 15. Cuộn trong khi kéo và thả (WPF)
- 16. Kéo và thả trong GWT 2.4
- 17. Lỗi trong Delphi VCL Kéo và thả?
- 18. Kéo và thả trong ảnh nhỏ
- 19. kéo và thả trong winforms hoặc wpf
- 20. làm thế nào để chương trình kéo và thả với snap vào khu vực trong Objective-C cho IOS
- 21. Kéo và thả trong khung hình mozilla
- 22. Kéo và thả tệp trong Firefox (v10)
- 23. cho phép kéo và thả trên thiết bị di động màn hình cảm ứng
- 24. Triển khai Kéo và Thả trong Gingerbread
- 25. Kéo và thả giữa hai UICollectionViews
- 26. Html5 Kéo và thả trong Android
- 27. WPF: Làm cách nào để cho phép cuộn bằng bánh xe chuột trong ListView trong khi kéo các mục ListView?
- 28. Làm thế nào để lắng nghe để kéo và thả văn bản thuần túy trong textarea với jQuery?
- 29. làm thế nào để kéo và thả các diễn viên trên libgdx scene2d?
- 30. Cách kéo và thả hàng trong cùng một datagridview