jay*_*jay 2 java swing drag-and-drop jtable
DefaultTableModel modeltable = new DefaultTableModel(8,8);
table = new JTable(modeltable);
table.setBorder(BorderFactory.createLineBorder (Color.blue, 2));
int height = table.getRowHeight();
table.setRowHeight(height=50);
table.setColumnSelectionAllowed(true);
table.setDragEnabled(true);
le1.setFillsViewportHeight(true);
panel.add(table);
panel.setSize(400,400);
DnDListener dndListener = new DnDListener();
DragSource dragSource = new DragSource();
DropTarget dropTarget1 = new DropTarget(table, dndListener);
DragGestureRecognizer dragRecognizer2 = dragSource.
createDefaultDragGestureRecognizer(option1,
DnDConstants.ACTION_COPY, dndListener);
DragGestureRecognizer dragRecognizer3 = dragSource.
createDefaultDragGestureRecognizer(option2,
DnDConstants.ACTION_COPY, dndListener);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个问题,将鼠标监听器添加到"table"这是drop target,接受drop组件从鼠标中掉落的地方.在此代码中,当组件进入放置目标时,它总是进入默认位置.我无法自定义放置目标上的位置.请有人帮我这个.提前致谢
那些听众太低级了.实现dnd的适当方法是实现自定义TransferHandler并将该自定义处理程序设置为您的表.
public class MyTransferHandler extends TransferHandler {
public boolean canImport(TransferHandler.TransferSupport info) {
// we only import Strings
if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) {
return false;
}
JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation();
// ... your code to decide whether the data can be dropped based on location
}
public boolean importData(TransferHandler.TransferSupport info) {
if (!info.isDrop()) {
return false;
}
// Check for String flavor
if (!info.isDataFlavorSupported(DataFlavor.stringFlavor)) {
displayDropLocation("Table doesn't accept a drop of this type.");
return false;
}
JTable.DropLocation dl = (JTable.DropLocation)info.getDropLocation();
// ... your code to handle the drop
}
}
// usage
myTable.setTransferHandler(new MyTransferHandler());
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Swing标记描述中链接的在线教程中的示例,即拖放一章上面的代码片段是从BasicDnD示例中获取的.