Mover String com mouse - [DÚVIDA]

9 respostas
felipehts

Tenho um exemplo abaixo que move um quadrado, através do mouse, gostaria de saber como seria para mover uma String com o mouse, exemplo:
==> Através do "g2d.drawString("teste", 105, 70);", crio a String teste na tela, como move-la através do mouse, alguém poderia me ajudar ??? vlw, segue abaixo o código com o quadrado....

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;

public class Janela extends JFrame {
    private Rectangle2D.Double quad = new Rectangle2D.Double(50, 50, 50, 50);

    public static void main(String[] args) {
        new Janela().setVisible(true);
    }

    public Janela() {
        setSize(250, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MouseHandler handler = new MouseHandler();
        addMouseMotionListener(handler);
        addMouseListener(handler);
        setBackground(Color.GRAY);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setColor(Color.RED);
        g2d.draw((Shape) quad);
        g2d.dispose();
    }

    public class MouseHandler extends MouseAdapter {
        private boolean mouseDownOnQuad = false;
        @Override
        public void mousePressed(MouseEvent e) {
            mouseDownOnQuad = quad.contains(e.getPoint());
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            mouseDownOnQuad = false;
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            if (!mouseDownOnQuad)
                return;
            quad.x = e.getX() - (quad.width / 2.0);
            quad.y = e.getY() - (quad.height / 2.0);
            repaint();
        }
    }
}

9 Respostas

ViniGodoy

Isso aí não funcionou?

felipehts

Funcionou sim, porém como ainda sou leigo nesse assunto de mover algo com mouse, não sei como alterar o código de modo que mova uma string e não um quadrado como é mostrado no código acima…

felipehts

Funcionou sim, porém como ainda sou leigo nesse assunto de mover algo com mouse, não sei como alterar o código de modo que mova uma string e não um quadrado como é mostrado no código acima…

melhor dizendo…não sei como declarar um String e essa seja utilizada no metodo: “public void mouseDragged”, tipo já tentei alterar o tipo quad para string, porém, sempre ocorre erro quando faço essa mudança, mesmo alterando no paint…

ViniGodoy

Quando você está usando Java 2D, você vai acabar desenhando a String com a classe Graphics, como fez para o Shape. O processo de mover em si é o mesmo.

felipehts

ViniGodoy:
Quando você está usando Java 2D, você vai acabar desenhando a String com a classe Graphics, como fez para o Shape. O processo de mover em si é o mesmo.

Poderia me mostra um exemplo como seria, pois o Shape não é compativel para String.
tipo usei:

g2d.drawString(string, 10, 20);

porém não funcionou

Marcio_Lima

na declaração:

private Rectangle2D.Double quad = new Rectangle2D.Double(50, 50, 50, 50);   
        // acrescente:
        private int tal_X=105, tal_Y = 70;

no paint:

g2d.draw((Shape) quad); 
        // acrescente:
        g2d.drawstring("teste", tal_X, tal_Y);

no dragging:

quad.y = e.getY() - (quad.height / 2.0);
        // acrescente:
        tal_X = quad.x + 55;
        tal_Y = quad.y + 20;
felipehts

Marcio_Lima:
na declaração:

private Rectangle2D.Double quad = new Rectangle2D.Double(50, 50, 50, 50);   
        // acrescente:
        private int tal_X=105, tal_Y = 70;

no paint:

g2d.draw((Shape) quad); 
        // acrescente:
        g2d.drawstring("teste", tal_X, tal_Y);

no dragging:

quad.y = e.getY() - (quad.height / 2.0); // acrescente: tal_X = quad.x + 55; tal_Y = quad.y + 20;

Amigo, valeu pela dica, porém eu gostaria que apenas a String teste se movesse, gostaria de eliminar o quadrado, deixando apenas a palavra: “teste”. obrigado

ViniGodoy

É só tirar a linha que diz:

g2d.draw(shape);
felipehts

É só tirar a linha que diz:

g2d.draw(shape);

e na linha:

public void mousePressed(MouseEvent e) { mouseDownOnQuad = quad.contains(e.getPoint()); }
o que eu devo fazer, pois quando clico na string ela se move, porém a partir do ponto que está o quadrado…

Criado 8 de outubro de 2010
Ultima resposta 11 de out. de 2010
Respostas 9
Participantes 3