Boa noite pessoal!
Bem, preciso “desenhar” ou criar um linha em um frame onde eu possa movê-la quando eu clicar e arrastar o mouse.
Alguém tem uma idéia?
[]'s
Boa noite pessoal!
Bem, preciso “desenhar” ou criar um linha em um frame onde eu possa movê-la quando eu clicar e arrastar o mouse.
Alguém tem uma idéia?
[]'s
Experimente este teste e, depois, ajuste o posicionamento do mouse sobre o objeto.
package pacote;
import java.awt.Color;
import java.awt.Component;
import java.awt.Panel;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Movimentaçao extends JPanel implements MouseListener, MouseMotionListener{
Panel areaTela;
JPanel [] retango = new JPanel [4];
Color [] cores = {Color.blue, Color.green, Color.yellow, Color.red};
boolean movendo = false;
int Idx, antX, antY;
public Movimentaçao(){
areaTela = new Panel();
areaTela.setBackground(Color.cyan);
areaTela.setLayout(null);
areaTela.setBounds(0, 0 , 880, 580);
int lefo = 10;
for (int ix=0; ix<4; ix++){
retango[ix] = new JPanel();
retango[ix].setBounds(lefo, 10, 70, 5);
retango[ix].setBackground(cores[ix]);
retango[ix].addMouseListener(this);
retango[ix].addMouseMotionListener(this);
retango[ix].setName("w" + ix);
areaTela.add(retango[ix]);
lefo +=100;
}
add(areaTela);
}
public void mousePressed(MouseEvent evt) {
Component compo = evt.getComponent();
String nome = compo.getName();
if(nome.charAt(0) != 'w') return;
Idx = Integer.parseInt(nome.substring(1));
retango[Idx].setBorder(BorderFactory.createLineBorder(Color.white,2));
movendo = true;
antX = evt.getX();
antY = evt.getY();
}
public void mouseReleased(MouseEvent evt) {
retango[Idx].setBorder(null);
movendo = false;
}
public void mouseDragged(MouseEvent evt) {
if (movendo == false) return;
int x = evt.getX();
int y = evt.getY();
int movX = x - antX;
int movY = y - antY;
antX = x;
antY = y;
Point pnt = null;
pnt = retango[Idx].getLocation();
pnt.x += movX;
pnt.y += movY;
retango[Idx].setLocation(pnt);
}
public void mouseMoved(MouseEvent evt) { }
public void mouseEntered(MouseEvent evt) { }
public void mouseExited(MouseEvent evt) { }
public void mouseClicked(MouseEvent evt) { }
public static void main(String[] args) {
JFrame frame = new JFrame("Movimentaçao");
frame.add(new Movimentaçao());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(900, 600);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Olá Marcio Lima, obrigado pela atenção!
Bem, algo parecido com o que você me enviou eu até conseguir fazer, o problema é que quando clico na linha e arrasto o ponteiro do mouse não fica junto da linha o tempo todo. Ele fica se distanciando e com uma movimentação bem forçada.
Pesquisei bastante e pelo menos ainda não encontrei, mas eu gostaria de desenhar a linha com o método DrawLine por exemplo e depois movimentá-la. Porém, ainda não tive sucesso.
Na verdade eu preciso desenhar essa linha porque quero criar um simetrógrafo para uma aplicação desktop que estou desenvolvendo e na etapa de avaliação postural preciso que em cima da imagem que eu ja capturo da webcam eu possa habilitar uma grade com linhas onde essas linhas eu possa movimentá-las.
De qualquer maneira, fico muito grato e aguardando mais dicas enquanto não obtenho a solução.
A utilização do método DrawLine NÃO cria um objeto, tornando-se difícil movê-la com o mouse.
Pense em um painel grande (com a imagem e as linhas) embutido em outro painel menor, sendo movimentado pelas barras de rolagem ou pelas setas do teclado ou pelo mouse.