当您将一个 jlabel(B) 拖到另一个上时,我正在使用传输处理程序将文本从一个 jlabel (A) 传输到另一个。我将 B 上的文本更改为 A 的文本,但是有没有办法在将文本放在上面之前识别 B 的文本是什么?
这就是改变文本的地方,相当简单。但我只想在某些条件下更改 B 的文本 public void mousePressed(MouseEvent e) { JComponent comp = (JComponent)e.getSource();
TransferHandler handler = comp.getTransferHandler();
System.out.println(e.toString());
handler.exportAsDrag(comp, e, TransferHandler.MOVE);
//repaint();
}
所以我尝试覆盖导入数据。它的作用是我有两张卡片(JLabels),一开始它们以空布局出现在它们的起始位置,所以如果将一张卡片拖到另一张卡片上,底部卡片会回到它的起始位置,这就是home1 和 home2 代表。那行得通,但是我希望文本更改为顶部卡片的文本,但这不起作用,那么有没有办法获取您拖到的 jlabel 的值?
TransferHandler transfer = new TransferHandler("text"){
JComponent sourced;
Transferable datad;
@Override
protected void exportDone(JComponent source, Transferable data, int action) {
if (action == MOVE){
((JLabel) source).setText("");
sourced = source;
datad = data;
}
}
@Override
public int getSourceActions(JComponent c) {
return COPY | MOVE;
}
@Override
public boolean importData(JComponent comp, Transferable t)
{
if( !((JLabel)comp).getText().equals(""))
{
String text = ((JLabel)comp).getText();
if(text.equals(String.valueOf(card1)) )
{
card1.setBounds(home1);
card1.setVisible(true);
}
if(text.equals(String.valueOf(card2)) )
{
card2.setBounds(home2);
card2.setVisible(true);
}
}
return true;
}
};
完整代码在这里http://pastebin.com/4mxkQY30