Drag-And-Drop Aplicações Swing em Java – Parte 02
Neste artigo começaremos a implementação da camada de transferência.
Drag-And-Drop Aplicações Swing em Java – Parte 02
Aprenda
a usar as classes de Drag-and-Drop do Java Swing através de um exemplo prático.
Por: Francisco Voccio Netto
Começando a implementação da camada de
transferência
Precisamos implementar uma classe
que seja o gerenciador das transferências. Este gerenciador ficará responsável
por ditar as regras do nosso exemplo.
Estarei implementando nossa classe GerenciadorDeTransferencia.java,
sendo que esta classe, por sua vez, deverá implementar a interface Transferable.
Pergunta: Mas porque preciso implementar essa interface?!
Resposta:
Precisamos implementar essa
interface porque necessitamos definir quais são nossos flavors. Flavors são objetos
da classe DataFlavor. Se fôssemos traduzir para o
português seria algo como os “sabores”! Sabores lembram escolhas, certo? Muito
bem, definimos quais são os tipos de Drag-and-Drop que a nossa aplicação irá
obedecer.
Escolheremos o tipo GerenciadorDeTransferencia.localStringFlavor que
possibilitará a transferência de objetos na mesma instância da aplicação.
A implementação é feita como mostra a Listagem 1.
Listagem 1. GerenciadorDeTransferencia.java
package br.javamagazine.dnd;
import java.awt.datatransfer.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import br.javamagazine.botoes.Botao;
public class GerenciadorDeTransferencia implements Transferable
{
public static final DataFlavor
localStringFlavor = DataFlavor.stringFlavor;
public static final DataFlavor[]
flavors = { GerenciadorDeTransferencia.localStringFlavor };
private static final List
flavorList = Arrays.asList(flavors);
private Botao botao;
private DataFlavor nossaOpcao;
public GerenciadorDeTransferencia() {
definirOpcaoDnD();
}
public GerenciadorDeTransferencia(Botao botao) {
this();
this.botao = botao;
}
private void definirOpcaoDnD() {
try {
nossaOpcao = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
+ ";class=br.javamagazine.telas.util.PainelContainer");
}
catch (ClassNotFoundException ex) {
//tratar
}
}
public synchronized DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return (flavorList.contains(flavor));
}
public synchronized Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException
{
if (flavor.equals(nossaOpcao)) {
return this.botao;
}
else {
throw new UnsupportedFlavorException(flavor);
}
}
public DataFlavor obterNossaOpcao() {
return nossaOpcao;
}
}
Agora
que temos nosso gerenciador configurado, podemos dar início às camadas do DnD.
Como o próprio nome já diz, precisamos pensar nas duas faces separadamente: o
lado do Drag (desenvolveremos os DragGestureListener) e o lado do Drop
(DropTargetListener).
Essas
duas interfaces são de extrema importância para que tenhamos o DnD com uma
ótima funcionalidade.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo