転送ハンドラーを使用して、ある jlabel (B) を別の jlabel (A) にドラッグしたときに、ある 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();
}
そこで、インポートデータをオーバーライドしてみました。2 枚のカード (JLabels) があり、最初は null レイアウトの開始位置に表示されるため、一方のカードをもう一方のカードにドラッグすると、一番下のカードが開始位置に戻ります。 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