当您将一个jlabel(B)拖到另一个jlabel(B)上时,我正在使用传输处理程序将文本从一个jlabel(A)传输到另一个jlabel。我在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;
}
};