Te pergunto se há necessidade de usar Drag.
Você precisa redesenhar a peça enquanto ela é movida, ou apenas quer usar o evento de Drag para saber de onde até onde movê-la?
Se você for ter que redesenhar a peça usando cada atualização do evento do mouse, vai ser medonho.
Se não precisar redesenhar a peça, poderia te dar uma dica usando o que falei acima com mousePressed e mouseReleased. Acho mais "econômico" =P
mouseAdapter = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
MouseEvent posicao = new MouseEvent(NOME_DA_SUA_CLASSE.this, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger());
NOME_DA_SUA_CLASSE.this.inputRecorder.setMouseEvent(posicao);
}
@Override
public void mouseReleased(MouseEvent e) {
NOME_DA_SUA_CLASSE.this.inputRecorder.setMouseEvent(e);
}
};
Com estes eventos, você sabe onde o jogador clicou o botão do mouse e onde ele soltou.
Se mousePressed ocorreu em cima de uma peça e mouseRelease em cima de uma vaga no tabuleiro, valide qual peça foi selecionada e se ela pode ser movida, caso positivo, execute.
Outra maneira bem simples:
Ouça um evento completo de click (pressed e released), e desenhe um quadrado de seleção ao redor da peça clicada. Depois, aguarde o outro clique para ver onde o jogador clicou. Valide a posição final e atualize as peças no tabuleiro.
Caso você necessite usar drag e redesenhar, eu penso em algo diferente quando chegar em casa.
Abraço