Ich habe eine JList und möchte den Benutzer in der Lage sein, die Elemente in der Liste mit Drag-n-Drop (mit meinem eigenen ListModel und ListCellRenderer, wenn dies einen Unterschied macht) neu anordnen). Welche Objekte muss ich erstellen und wie verarbeite ich die Aktion?So aktivieren Sie drag-and-drop in JList
8
A
Antwort
1
Wie wäre es etwa so:
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 Antwort:
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
Im folgenden Verfahren gibt es einen logischen Fehler in ihm, denn sobald die Maustaste losgelassen wird, Das Ziehen muss gestoppt werden. Im Klartext muss die IF-Bedingung einfach
@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;
}
negiert werden
Verwandte Themen
- 1. So aktivieren Sie Ereignisse für Komponenten in JList
- 2. DragandDrop in squish
- 3. So aktivieren Sie die Volltextsuche
- 4. So aktivieren Sie Intellisense in VIM (gvim)
- 5. So aktivieren Sie absolute Pfade in LaTeX
- 6. So aktivieren Sie Neon-Anweisung in Xcode
- 7. So aktivieren Sie CORS in ASP.NET Core
- 8. So aktivieren Sie Revisionsinformationen in der Zeilennummeransicht
- 9. So aktivieren Sie die Syntaxhervorhebung in Etherpad
- 10. So aktivieren Sie SingleClickEdit in ag-grid
- 11. So aktivieren Sie sichere Cookies in Wildfly?
- 12. So aktivieren Sie cURL in PHP/XAMPP
- 13. So aktivieren Sie CORS in Grails 3.0.1
- 14. So aktivieren Sie Telefonieaktionen im Android-Gerätemonitor
- 15. So aktivieren Sie Webbibliotheken .NET-Bibliotheken
- 16. So aktivieren Sie die Espresso-Testaufzeichnung
- 17. So aktivieren Sie instamojo Sandbox (Testmodus) Modus
- 18. So aktivieren Sie Benachrichtigungen auf meinem Entwicklungsserver
- 19. So aktivieren Sie die NFC-Einstellung
- 20. So aktivieren Sie mod_wsgi nach pip install
- 21. So aktivieren Sie die Protokollierung von Ehcache
- 22. So aktivieren Sie SSL für SharePoint
- 23. So aktivieren Sie Android Open Application Sprachinteraktion
- 24. Android Auto - So aktivieren Sie den Entwicklermodus
- 25. STM32 - So aktivieren Sie den DWT-Zykluszähler
- 26. MVC3 So deaktivieren/aktivieren Sie ActionLink
- 27. So aktivieren Sie Diagnose Ausführlichkeit für Kuchen
- 28. So aktivieren Sie onpaste nur für Buchstaben
- 29. So aktivieren Sie WCF programmatisch verfolgt?
- 30. So aktivieren Sie Facebook PLAY NOW button