Mercurial Hosting > luan
changeset 1947:6538936ac108 default tip
swing
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 21 May 2025 11:49:22 -0600 |
parents | 92fe3927a090 |
children | |
files | src/luan/modules/swing/ListLuan.java |
diffstat | 1 files changed, 54 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/luan/modules/swing/ListLuan.java Tue May 20 19:06:57 2025 -0600 +++ b/src/luan/modules/swing/ListLuan.java Wed May 21 11:49:22 2025 -0600 @@ -5,6 +5,9 @@ import javax.swing.ListCellRenderer; import javax.swing.DefaultListCellRenderer; import javax.swing.JLabel; +import javax.swing.DropMode; +import javax.swing.TransferHandler; +import javax.swing.JComponent; import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionEvent; import java.awt.Component; @@ -12,6 +15,8 @@ import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.DataFlavor; import goodjava.logging.Logger; import goodjava.logging.LoggerFactory; import luan.Luan; @@ -46,6 +51,51 @@ } }; + private static final DataFlavor elementFlavor = new DataFlavor(Object.class, "list element"); + + private final TransferHandler transferHandler = new TransferHandler() { + private int draggedIndex = -1; + + @Override public int getSourceActions(JComponent c) { + return MOVE; + } + + @Override protected Transferable createTransferable(JComponent c) { + draggedIndex = getSelectedIndex(); + return new Transferable() { + public Object getTransferData(DataFlavor flavor) { + return getSelectedValue(); + } + public DataFlavor[] getTransferDataFlavors() { + return new DataFlavor[] { elementFlavor }; + } + public boolean isDataFlavorSupported(DataFlavor flavor) { + return elementFlavor.equals(flavor); + } + }; + } + + @Override public boolean canImport(TransferSupport info) { + return info.isDrop() + && info.isDataFlavorSupported(elementFlavor) + && info.getComponent() == ListLuan.this + ; + } + + @Override public boolean importData(TransferSupport info) { + if (!canImport(info)) return false; + + JList.DropLocation dl = (JList.DropLocation) info.getDropLocation(); + int dropIndex = dl.getIndex(); + Object item = model.get(draggedIndex); + model.remove(draggedIndex); + if (dropIndex > draggedIndex) dropIndex--; + model.add(dropIndex, item); + setSelectedIndex(dropIndex); + return true; + } + }; + public final DefaultListModel<Object> model; private int horizontalAlignment = -1; private Color hoverBackground = null; @@ -54,7 +104,7 @@ public ListLuan() { super(new DefaultListModel<Object>()); this.model = (DefaultListModel)getModel(); - //logger.info(getSelectionBackground().toString()); + //logger.info(getTransferHandler().toString()); setCellRenderer(cellRenderer); addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { @@ -73,6 +123,9 @@ repaint(); } }); + setDropMode(DropMode.INSERT); + setTransferHandler(transferHandler); + setDragEnabled(true); } public void setHorizontalAlignment(int alignment) {