Oi amigos,
Estou montando um programinha de desenho, só que cheguei a um ponto que nao consigo imaginar uma solucao eficaz para meu problema,
O problema:
Como qualquer programa de desenho, quando o usuario seleciona uma ferramenta, por exemplo o lapis drawLine(), escolhe os pontos x,y na janela mouse.Pressed(), arrasta o mouse sobre a tela(desenhando) e apos soltar o mouse mouseClicked() o desenho drawLine() aparece, so que eu gostaria que conforme o usuario movimentase o mouse mouseMoved() fosse exibido na tela em tempo real a posicao do objeto, afim de se saber como esta ficando o desenho.
Eu nao consegui chegar a uma solucao Logica/eficaz, pensei em desenhar Paineis e ir os removendo conforme o movimento do mouse, mas acho que nao seria a melhor solucao, seria custoso em termos de desempenho.
Se alguem tiver alguma ideia,…
recomendo voce utilizar o evento mouseDraged()
O X da questao é :
Como apagar o objeto q foi desenhado ?
Como desenhar,os eventos do teclado etc…isso eu ja fiz!
Um amigo me falou sobre dnd Drag and Drop, com dnd eu posso arrastar o objeto e mostrar a posicao atual dele na tela ? como se fosse um icone de um desktop.
acho que agora eu consegui ser mais esclarecedor,.
abracos
;]
acredito q so exista um jeito
so eh possivel vc apagar um desenho todo de um vez chamando o metodo repaint() :???:
entao vc precisa guardar as informações sobre o desenho… para desenhar novamente o q for preciso
[quote]acredito q so exista um jeito
so eh possivel vc apagar um desenho todo de um vez chamando o metodo repaint() Confused
entao vc precisa guardar as informações sobre o desenho… para desenhar novamente o q for preciso
Wink[/quote]
Hoje fui mexer na classe novamente e Consegui, se alguem quiser ler a classe e ver se foi implementada da melhor forma :). Para apagar os outros desenhos, desenhei um retangulo sobre eles, será que foi a melhor alternativa em termos de desempenho ? a cada pixel movido pelo mouse eh um reangulo sobre escritto
grato.
/*
* Created on Dec 30, 2004
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
/**
*
*
* Copyright 2005 - Rober Hoelscher
* Frederico Westphalen - Brazil
*
* @author Rober Hoelscher - hrober@gmail.com
* @version undefined
*
*/
public class Drawing{
JFrame janela;
DrawingPanel drawingPanel;
Drawing(){
janela = new JFrame("Drawing");
drawingPanel = new DrawingPanel();
/***Adiciona componentes***/
janela.getContentPane().add(drawingPanel);
/***Configura exibição da janela***/
janela.setSize(400,300);
janela.setBackground(Color.WHITE);
janela.setVisible(true);
/***Configura o fechamento da janela***/
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/***Método construtor***/
public static void main(String[] args) {
Drawing d = new Drawing();
}
}
/***
* ---
*/
class DrawingPanel extends JPanel implements MouseListener , MouseMotionListener{
private JPanel drawPanel;
/***Coordenadas do mouse no JPanel***/
private int x , x2 , x3;
private int y , y2 , y3;
private Vector lines ;
private Vector color ;
DrawingPanel(){
this.setBackground(Color.WHITE);
/***Configura ouvintes do mouse***/
this.addMouseListener(this);
this.addMouseMotionListener(this);
lines = new Vector(50,50);
color = new Vector(50,50);
}
/*** Interfaces para controle do mouse ***/
public void mouseMoved(MouseEvent event){
}
public void mousePressed(MouseEvent e){
x = e.getX();
y = e.getY();
x2 = -1 ;
/***Anexa um (-1) sentinela ao Rentangle***/
// color.addElement(getForeground());
// lines.addElement(new Rectangle(x,y,-1,-1));
// repaint();
}
public void mouseDragged(MouseEvent e){
// color.addElement(getForeground());
// lines.addElement(new Rectangle(x,y,x2,y2));
x3 = e.getX();
y3 = e.getY();
repaint();
}
public void mouseReleased(MouseEvent e){
x2 = e.getX();
y2 = e.getY();
color.addElement(getForeground());
lines.addElement(new Rectangle(x,y,x2,y2));
repaint();
/***Anexa um (-1) sentinela ao Rentangle***/
x = -1 ;
}
public void mouseClicked(MouseEvent event){
}
public void mouseEntered(MouseEvent event){
}
public void mouseExited(MouseEvent event){
}
/***Reescreve o método paint***/
public void paint(Graphics g){
Rectangle r ;
/***Desenha um retangulo branco na janela para remover os desenhos anteriores***/
g.setColor(Color.WHITE);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(getForeground());
for(int i = 0 ; i < lines.size() ; i++){
r = (Rectangle) lines.elementAt(i);
g.setColor((Color)color.elementAt(i));
g.drawLine(r.x,r.y,r.width,r.height);
}
if(x != -1) {
g.drawLine(x,y,x3,y3);
}
}
}