Spec-Zone .ru
спецификации, руководства, описания, API
|
Мы показали, как реализовать, перетаскивают и отбрасывают поддержку и как реализовать сокращение, копию, поддержку вставки. Как Вы комбинируете обоих в одном компоненте?
Вы реализуете обоих в пределах TransferHandler
's importData
метод, как это:
if (transferSupport.isDrop()) { // put data in transferSupport.getDropLocation() } else { // determine where you want the paste to go (ex: after current selection) // put data there }
ListCutPaste
пример, обсужденный на CCP в F нетекстовой Компонентной странице, поддерживает и dnd и ccp. Вот importData
метод ( if
-else
логика отбрасывания является полужирной):
public boolean importData(TransferHandler.TransferSupport info) { String data = null; //If we cannot handle the import, bail now. if (!canImport(info)) { return false; } JList list = (JList)info.getComponent(); DefaultListModel model = (DefaultListModel)list.getModel(); //Fetch the data -- bail if this fails try { data = (String)info.getTransferable().getTransferData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException ufe) { System.out.println("importData: unsupported data flavor"); return false; } catch (IOException ioe) { System.out.println("importData: I/O exception"); return false; } if (info.isDrop()) { //This is a drop JList.DropLocation dl = (JList.DropLocation)info.getDropLocation(); int index = dl.getIndex(); if (dl.isInsert()) { model.add(index, data); return true; } else { model.set(index, data); return true; } } else { //This is a paste int index = list.getSelectedIndex(); // if there is a valid selection, // insert data after the selection if (index >= 0) { model.add(list.getSelectedIndex()+1, data); // else append to the end of the list } else { model.addElement(data); } return true; } }
Это - единственное место, где Вы должны установить if
-else
логика, чтобы различить dnd и ccp.