gpt4 book ai didi

java - 使用 TransferHandler 拖放 JTable

转载 作者:行者123 更新时间:2023-11-29 08:03:17 25 4
gpt4 key购买 nike

目前我有两个表Table-A, Table-B。我的任务是将行从 Table-A 拖到 Table-B 或将行从 Table-B 拖到它本身。使用 TransferHandler 我已经完成了这个任务。但我的问题是,我无法识别从哪个表格行被拖到 Table-B .. 即,从 Table-A 到 Table-B 或从 Table-B 拖到它本身。在 TransferHandlerexportData 方法中,我向其中一列添加了一些额外的数据。基于此,当我通过 importData 方法导入数据时,我能够使用我向其添加数据的特定列找出它来自哪个表。我知道这根本不被推荐..所以我需要知道是否有解决这个问题的好方法?

最佳答案

您可以创建自己的 Transferable 实现,它将引用源组件。然后在 TransferHandler.importData() 中,您可以将它与作为目标组件的 TransferSupport.getComponent() 进行比较。

例如,这是将要传输的字符串的包装器:

public class DataWrapper {
String data;
Object source;

public DataWrapper(String data, Object source) {
super();
this.source = source;
this.data = data;
}

public String getData() {
return data;
}
public Object getSource() {
return source;
}
}

这是一个非常基本的 Transferable 实现。

public class DataWrapperTransferable implements Transferable {
public static DataFlavor FLAVOR = new DataFlavor(DataWrapper.class,
"DataWrapper");

private DataFlavor flavors[];
private DataWrapper dataWrapper;

public DataWrapperTransferable(String data, Object source) {
dataWrapper = new DataWrapper(data, source);
flavors = new DataFlavor[] { FLAVOR };
}

@Override
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (flavor.equals(FLAVOR)) {
return dataWrapper;
} else {
throw new UnsupportedFlavorException(flavor);
}
}

@Override
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}

@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(FLAVOR) || flavor.equals(DataFlavor.stringFlavor);
}
}

然后,在 TransferHandler 中:

public boolean importData(TransferSupport support) {
DataWrapper dataWrapper = (DataWrapper) support
.getTransferable().getTransferData(
DataWrapperTransferable.FLAVOR);

if (dataWrapper.getSource() == support.getComponent()) {
//the originator and destination are the same
} else {
//drop from another component
}

//rest of the method
}

关于java - 使用 TransferHandler 拖放 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com