Ho una JList e voglio che l'utente sia in grado di riordinare gli elementi nell'elenco usando il drag-n-drop (usando il mio ListModel e ListCellRenderer, se questo fa qualche differenza). Quali oggetti devo creare e come posso elaborare l'azione?Come abilitare il trascinamento all'interno di JList
8
A
risposta
1
Che ne dite di qualcosa di simile:
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 gen Taccis risposta:
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
Nel seguente metodo v'è un errore logico in essa, perché non appena il pulsante del mouse viene rilasciato, il trascinamento deve essere fermato. In linguaggio semplice, la condizione IF deve essere negata semplicemente
@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;
}
Problemi correlati
- 1. Riordino di JList con trascinamento della selezione
- 2. come disabilitare/abilitare il trascinamento, lo zoom e cambiare il cursore in Google maps v3
- 3. In che modo abilitare il trascinamento di un file su * .exe e ottenerlo come parametro?
- 4. Immagine di trascinamento personalizzata con NSTableView come sorgente di trascinamento
- 5. Revalidating JList - elementi personalizzati
- 6. JList allineamento del testo
- 7. JList e JComboBox sincronizzati?
- 8. Come posso abilitare il 'draggable' su un elemento con contentEditable?
- 9. trascinamento HTML/drop - come impostare il nome del file di un * in uscita * trascinamento (per desktop)
- 10. Come generare una Jlist con colori alternati
- 11. Trascinare il trascinamento e rilasciare
- 12. Prevenire JList dal ridimensionamento automatico
- 13. Aggiunta barra di scorrimento a JList
- 14. Word wrap negli elementi JList
- 15. Disabilitare gli elementi in JList
- 16. Imposta valori JList non selezionabili
- 17. Recupero dei dati da JList
- 18. FullCalendar: come interrompere il trascinamento di eventi personalizzati?
- 19. Come eliminare il trascinamento di righe/colonne vuote
- 20. Come gestire il trascinamento in un'app di scacchi Android?
- 21. trascinamento dell'ordine di immagini
- 22. Esiste un componente JList intercambiabile?
- 23. Elimina elemento selezionato da JList
- 24. Gli elementi di una JList possono essere formattati come HTML
- 25. Come impostare ListModel di una JList in Netbeans?
- 26. Come abilitare il taglio, copiare in JPasswordField?
- 27. Come "abilitare il web" un'applicazione legacy C++
- 28. Come abilitare il supporto https in libcurl?
- 29. Come abilitare il terminale pngcairo in Gnuplot
- 30. Come abilitare il multi touch in cocos2d?