【发布时间】:2012-12-13 17:42:14
【问题描述】:
我正在将自定义对象拖放到 JLabel 中,并且能够在传输过程中引用该对象(将标签字符串更改为接收到的对象 toString),但不确定如何将自定义对象实际存储在 JLabel 中或建立参考。
在转移过程中实现此目的的最佳方法是什么?
这是接收对象并使用它来设置文本的工作传输代码(非常感谢之前的回答:here:
public boolean importData(TransferSupport support) {
boolean accept = false;
if (canImport(support)) {
try {
Transferable t = support.getTransferable();
Object value = t.getTransferData(PersonTransferable.PERSON_FLAVOR);
if (value instanceof Person) {
Component component = support.getComponent();
if (component instanceof JLabel) {
((JLabel)component).setText(((Person)value).toString());
//action here
}
}
} catch (Exception exp) {
exp.printStackTrace();
}
}
return accept;
}
JLabels 具有我想将它们存储到的特定实例变量。由于我有组件(JLabel)和值(自定义对象),我可以制作这个链接吗?
最坏的情况,我只需要为 each 标签构建一个 TransferHandler 并准确引用该值。无论如何,这可能是最佳做法吗?
【问题讨论】:
-
为什么要将对象存储在 JLabel 中?如果您希望将 Person 与 JLabel 相关联,您可以使用
Map<JLabel, Person>,例如 HashMap,但我想您可能更愿意将 Person 放入 ArrayList 或其他集合中。 -
我不熟悉映射,所以这可能是诀窍。
-
与此同时,作为一个(非常草率的)解决方法,我使用 JLabel 工具提示作为参考,并使用 if 语句将工具提示与相关值匹配...我绝对需要研究映射。
-
您存储什么信息,为什么必须将其与 JLabel 关联?如果您必须将对象与 JLabel 相关联,您只会使用 Map,但同样可能没有必要。 JLabel 用于显示信息而不是用于存储。你需要澄清你试图解决的问题,而不是你试图解决它的方式。
-
您可以根据需要使用
JComponent方法putClientProperty()和gettClientProperty()。也可以引用answer 来回答您之前关于此主题的问题。