Điều này có thể được thực hiện bằng cách thay đổi TransferHandler
của JTree
trở về một null Transferable
trên các nút lá không.
Dưới đây là một ví dụ nhanh:
JTree tree = new JTree();
tree.setDragEnabled(true);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setTransferHandler(new TransferHandler(null) {
public int getSourceActions(JComponent c) {
return MOVE;
}
protected Transferable createTransferable(JComponent c) {
JTree tree = (JTree) c;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent();
if (node.isLeaf()) {
// TODO create the Transferable instance for the selected leaf
} else {
return null;
}
}
});
Nguồn
2011-07-26 11:38:18
có lẽ đó là cách duy nhất, chỉ cần một hãy cẩn thận: tất cả các hành vi kéo mặc định bị mất khi cài đặt một handler tùy chỉnh. Điều cần làm là giải quyết tất cả các hoạt động cho trình xử lý mặc định và chỉ chặn việc tạo chuyển đổi, tiếc là không thể lần cuối tôi nhìn (một số phần quan trọng của BasicTransferHandler là gói riêng tư hoặc được bảo vệ, quên chính xác) – kleopatra
Thx , nó hoạt động như dự định. – jaster