Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Drag-And-Drop Aplicações Swing em Java – Parte 03

Veja neste artigo o Lado Drag.

Drag-And-Drop Aplicações Swing em Java – Parte 03

 

Aprenda a usar as classes de Drag-and-Drop do Java Swing através de um exemplo prático.

Por: Francisco Voccio Netto

Lado Drag

Vamos começar falando sobre a interface DragGestureListener, desenvolvi uma classe que implementa esta interface como mostra a listagem 2.

Listagem 2. OuvinteDrag.java

package br.javamagazine.dnd;

import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;
import br.javamagazine.botoes.Botao;

public class OuvinteDrag implements DragGestureListener {

  private static final long serialVersionUID = 2348726570484800827L;
  private Botao botaoDrag;

public OuvinteDrag(Botao botao) {
    this.botaoDrag = botao;
  }

 

  public void dragGestureRecognized(DragGestureEvent e) {

    if ((e.getDragAction() & botaoDrag.obterAcaoDrag()) == 0) { return; }

 

    if (botaoDrag instanceof ComponenteDragImpl) {

 

      Transferable transferable = new GerenciadorDeTransferencia(this.botaoDrag);

 

      try {

        e.startDrag(DragSource.DefaultCopyNoDrop, transferable, this.botaoDrag

            .obterDSListener());

 

      }

      catch (InvalidDnDOperationException idoe) {

        //Tratar

      }

    }

  }

}

Note que o método dragGestureRecognized é o nosso ponto de partida para o evento Drag, pois com ele nós passamos nosso gerenciador e o botão do menu, e com isso, informamos o domínio que o usuário está arrastando um objeto.


Ainda no âmbito Drag, temos uma outra importante classe para desenvolvermos: a classe OuvinteDragSource (Listagem 3). Ela é responsável por “ditar” o comportamento da nossa aplicação enquanto o usuário estiver arrastando o mouse.

Listagem 3. OuvinteDragSource
.java

 

package br.javamagazine.dnd;

 

import java.awt.dnd.*;

import br.javamagazine.botoes.Botao;

import br.javamagazine.telas.Editor;

 

public class OuvinteDragSource implements DragSourceListener {

 

  private static final long serialVersionUID = 1L;

  private Botao botaoDrag;

 

  public OuvinteDragSource(Botao botaoDrag) {

    this.botaoDrag = botaoDrag;

  }

 

 

  public void dragDropEnd(DragSourceDropEvent e) {

    if (!e.getDropSuccess()) { return; }

  }

 

  public void dragEnter(DragSourceDragEvent e) {

    DragSourceContext context = e.getDragSourceContext();

    // obtem qual acao será feita pelo drop

    int minhaAcao = e.getDropAction();

 

    if ((minhaAcao & botaoDrag.obterAcaoDrag()) != 0) {

      context.setCursor(DragSource.DefaultCopyDrop);

      if (e.getDragSourceContext().getComponent() instanceof Editor) {

        context.setCursor(DragSource.DefaultMoveDrop);

      }

 

    }

    else {

      context.setCursor(DragSource.DefaultCopyNoDrop);

    }

  }

 

  public void dragOver(DragSourceDragEvent e) {}

 

  /**

   * Quando o usuário sair do editor com o evento de drag,

   * o mouse irá sinalizar movimento ilegal.

   */

  public void dragExit(DragSourceEvent e) {

    DragSourceContext context = e.getDragSourceContext();

    context.setCursor(DragSource.DefaultCopyNoDrop);

  }

 

  /**

   * Caso o usuário aperte a tecla shift este evento será chamado como se

   * fosse um "link"

   */

  public void dropActionChanged(DragSourceDragEvent e) {

    DragSourceContext context = e.getDragSourceContext();

    context.setCursor(DragSource.DefaultCopyNoDrop);

  }

}

Nesta classe podemos ressaltar os métodos dragEnter, dragOver e dragExit, esses são os métodos que descrevem o comportamento da nossa aplicação.

Nota: reparem que obtenho sempre o contexto da aplicação drag e utilizo constantes da classe DragSource para definir quais os ícones do mouse nossa aplicação usará.


  • Em casos específicos esses ícones poderão ser personalizados.

 





    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Autor
Equipe Devmedia

Noticias/Dicas/Artigos pulicados.




Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da Java Magazine ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03