Swing/DnDBetweenLists のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DnDBetweenLists へ行く。
- 1 (2010-12-20 (月) 22:03:13)
- 2 (2011-02-25 (金) 20:28:45)
- 3 (2012-12-28 (金) 12:40:39)
- 4 (2013-07-26 (金) 01:16:51)
- 5 (2014-09-30 (火) 01:20:10)
- 6 (2014-12-02 (火) 01:49:35)
- 7 (2015-02-17 (火) 22:29:28)
- 8 (2015-03-19 (木) 16:40:18)
- 9 (2015-03-29 (日) 15:20:21)
- 10 (2017-02-21 (火) 16:46:55)
- 11 (2017-12-28 (木) 22:27:36)
- 12 (2018-02-14 (水) 17:46:42)
- 13 (2018-02-24 (土) 19:51:30)
- 14 (2019-09-26 (木) 20:50:07)
- 15 (2019-10-23 (水) 21:27:50)
- 16 (2021-05-26 (水) 06:49:15)
- title: JList間でのドラッグ&ドロップによるアイテムの移動 tags: [JList, DragAndDrop, TransferHandler] author: aterai pubdate: 2010-08-09T16:02:07+09:00
概要
JList
間でのドラッグ&ドロップによるアイテムの移動や並べ替えを行います。
Screenshot
Advertisement
サンプルコード
class ListItemTransferHandler extends TransferHandler {
private JList source = null;
@Override protected Transferable createTransferable(JComponent c) {
source = (JList) c;
indices = source.getSelectedIndices();
transferedObjects = source.getSelectedValues();
return new DataHandler(transferedObjects, localObjectFlavor.getMimeType());
}
@Override public boolean importData(TransferSupport info) {
if (!canImport(info)) return false;
JList target = (JList)info.getComponent();
JList.DropLocation dl = (JList.DropLocation)info.getDropLocation();
DefaultListModel listModel = (DefaultListModel)target.getModel();
int index = dl.getIndex();
int max = listModel.getSize();
if(index<0 || index>max) index = max;
addIndex = index;
try{
Object[] values = (Object[])info.getTransferable().getTransferData(localObjectFlavor);
for(int i=0;i<values.length;i++) {
int idx = index++;
listModel.add(idx, values[i]);
target.addSelectionInterval(idx, idx);
}
//---->
addCount = (target==source)? values.length : 0;
//<----
return true;
}catch(UnsupportedFlavorException ufe) {
ufe.printStackTrace();
}catch(java.io.IOException ioe) {
ioe.printStackTrace();
}
return false;
}
//......
View in GitHub: Java, Kotlin解説
上記のサンプルでは、一つのJList
内でのアイテムの並べ替えを行うTransferHandlerを使ったJListのドラッグ&ドロップによる並べ替えを元にListItemTransferHandler
を作成し、JList
間でのアイテム移動もできるようになっています。変更した箇所は、TransferHandlerを使ってJTableの行をドラッグ&ドロップ、並べ替えから、JTableの行を別のJTableにドラッグして移動と同じで、ドロップ先がドラッグ元と同じかどうかを調べて処理を変更しているだけです。
参考リンク
コメント
- アイテムをカット(Ctrl+X)すると
ClassCastException
が発生するのを修正。 -- aterai