Estou desenvolvendo um projeto no qual utilizo a cadeia de Freeman para desenhar formas.
Meu problema está relacionado a coordenadas, atualmente eu consigo digitar as coordenadas para definir onde iniciará o desenho, porém precisava fazer isso a partir do Clique do Mouse, ou seja, Meu X e Y inicial, seriam definidos a partir do clique do mouse.
Para entender melhor o funcionamento do projeto segue o link Link
Segue o código com ERRO para melhor entendimento:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Graphics;
import javax.swing.JOptionPane;
public class Desenho1 extends JFrame{
private int numero;
private int xi,yi,xf,yf,tam;
private int mousePositionX;
private int mousePositiony;
private boolean pressionado = false;
public Desenho1(){
super("Desenho");
addMouseListener(
new MouseListener() {
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
pressionado = true;
}
public void mouseReleased(MouseEvent e) {
pressionado = false;
}
});
setSize(1000,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(true);
setVisible(true);
}
public void paint(Graphics g) {
if(pressionado == true){
tam = Integer.parseInt(JOptionPane.showInputDialog("Digite o tamanho: "));
do{
numero = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da cadeia de freeman: "));
if(numero == 0){
xf = xi;
yf=yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 1){
xf = xi-tam;
yf=yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 2){
xf = xi-tam;
yf=yi;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 3){
xf = xi-tam;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 4){
xf = xi;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 5){
xf = xi+tam;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 6){
xf = xi+tam;
yf = yi;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 7){
xf = xi+tam;
yf = yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
}while(numero !=9);}
}
public static void main(String[] args){
new Desenho1();
}
}
Agora vou colocar o código funcionando porém sem o rastreio do mouse:
import java.awt.*;
import javax.swing.*;
public class Desenho extends JFrame{
private int numero;
private int xi,yi,xf,yf,tam;
public Desenho(){
super("Desenho");
setSize(1000,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(true);
setVisible(true);
}
public void paint(Graphics g) {
xi = Integer.parseInt(JOptionPane.showInputDialog("Digite a coordenada x inicial: "));
yi = Integer.parseInt(JOptionPane.showInputDialog("Digite a coordenada y inicial: "));
tam = Integer.parseInt(JOptionPane.showInputDialog("Digite o tamanho: "));
do{
numero = Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da cadeia de freeman: "));
if(numero == 0){
xf = xi;
yf=yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 1){
xf = xi-tam;
yf=yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 2){
xf = xi-tam;
yf=yi;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 3){
xf = xi-tam;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 4){
xf = xi;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 5){
xf = xi+tam;
yf = yi-tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 6){
xf = xi+tam;
yf = yi;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
else if(numero == 7){
xf = xi+tam;
yf = yi+tam;
g.drawLine(yi, xi, yf, xf);
xi = xf;
yi = yf;
}
}while(numero !=9);
}
public static void main(String[] args){
new Desenho();
}
}
Ao invés de digitar as coordenadas xi e yi, eu tenho que capturar elas através do mouse.