Swing/DnDBetweenLists のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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間でのドラッグ&ドロップによるアイテムの移動
Posted by terai at 2010-08-09
JList間でのドラッグ&ドロップによるアイテムの移動
JList間でのドラッグ&ドロップによるアイテムの移動や並べ替えを行います。
- &jnlp;
- &jar;
- &zip;
サンプルコード
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(TransferHandler.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;
}
//......
解説
上記のサンプルでは、一つのJList内でのアイテムの並べ替えを行うTransferHandlerを使ったJListのドラック&ドロップによる並べ替えを元にListItemTransferHandlerを作成し、JList間でのアイテム移動もできるようになっています。変更した箇所は、TransferHandlerを使ってJTableの行をドラック&ドロップ、並べ替えから、JTableの行を別のJTableにドラッグして移動と同じで、ドロップ先がドラッグ元と同じかどうかを調べて処理を変更しているだけです。