JList'im var ve kullanıcının herhangi bir fark yaratırsa kendi ListModel ve ListCellRenderer'ı kullanarak sürükle-bırak yöntemini kullanarak listedeki öğeleri yeniden sıralamasını istiyorum.). Oluşturmak için hangi nesnelere ihtiyacım var ve bu eylemi nasıl işlerim?JList İçinde Sürükle-Bırak Nasıl Etkinleştirilir?
8
A
cevap
1
Nasıl böyle bir şey hakkında:
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
Modifiye Jan TACCIS cevap: fare düğmesi serbest bırakıldığında kısa sürede çünkü içinde bir mantık hatası var aşağıdaki yöntemde
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
, sürükleme durdurulmalıdır. Düz dilde, IF koşulu yalnızca
@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;
}
reddedilmelidir.
İlgili konular
- 1. JList nasıl yeniden yüklenir?
- 2. Jlist hesaplaması
- 3. Bootstrap datepicker içinde tarih aralığı nasıl etkinleştirilir
- 4. OrientDb sunucu-config.xml içinde CORS nasıl etkinleştirilir
- 5. JList Değerlerini Ayrılmaz Yapın
- 6. Netbeans'de JList ListModel'i nasıl ayarlanır?
- 7. JList seçili öğesi String
- 8. Senkronize JList ve JComboBox?
- 9. Java JList ve JTextArea
- 10. Bean sınıfına bir JList nasıl bağlanır
- 11. Alternatif renkleri olan bir Jlist nasıl oluşturulur
- 12. JList öğesinde çift tıklatma olayı
- 13. php.ini'den mbstring nasıl etkinleştirilir?
- 14. NFC ayarı nasıl etkinleştirilir
- 15. Debian'da AUFS nasıl etkinleştirilir?
- 16. Ekstralarda buton nasıl etkinleştirilir?
- 17. Javascript küçültme nasıl etkinleştirilir?
- 18. Xcode'ta indeksleme nasıl etkinleştirilir?
- 19. Firefox'ta YSlow nasıl etkinleştirilir?
- 20. JList öğesinden bir öğe kaldırma
- 21. GWT'nin İskelesi'nde HTTPS nasıl etkinleştirilir?
- 22. Qlabel'de kenar yumuşatma nasıl etkinleştirilir?
- 23. İlkbahar-önyüklemede TaskScheduler nasıl etkinleştirilir?
- 24. Çift kesikli kenarlık nasıl etkinleştirilir?
- 25. Yüklemeden sonra mod_wsgi nasıl etkinleştirilir
- 26. Espresso Test Kaydı nasıl etkinleştirilir
- 27. Raylarda Ruby uyarıları nasıl etkinleştirilir?
- 28. JPasswordField'da nasıl kesme, kopyalama etkinleştirilir?
- 29. Python, tüm uyarılar nasıl etkinleştirilir?
- 30. Ubuntu'da LAMP'de mod_rewrite nasıl etkinleştirilir?