Como adicionar ponto no local exato clicado do JFrame?

7 respostas
levimendes

Olá pessoal, estou desenhando um ponto no local clicado do JFrame, mas o que está acontecendo
é que o ponto não é adicionado no local exato, como que eu faço para fazer com que o ponto
fique exatamente no local clicado :?: :?: :?: :?:

7 Respostas

Robsonvnt

tem que ver como vc esta fazendo
posta seu codigo ai

levimendes
import java.awt.Color;
import java.awt.Dimension;

import java.awt.Graphics;
import java.awt.Rectangle;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class PintarPonto extends JFrame {

    public PintarPonto() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout( null );
        this.setSize( new Dimension(400, 300) );
        this.setTitle( "Pintar ponto através do clique" );
        this.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    this_mouseClicked(e);
                }
            });
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
    }

    private void this_mouseClicked(MouseEvent e) {
        Ponto ponto = new Ponto();
        ponto.setBounds(this.getMousePosition().x, this.getMousePosition().y, 30, 30);
        ponto.setBackground(Color.BLUE);
        ponto.setOpaque(true);
        this.add(ponto);
        repaint();
    }
    
    public static void main(String[] args) {
        new PintarPonto();
    }
}

class Ponto extends JPanel {
       
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.RED);
        g.fillOval(10, 10, 7, 7);
        g.setColor(Color.BLACK);
        g.drawOval(10, 10, 7, 7);
    }
}
Robsonvnt

voce precisa mesmo adicional um jPanel a cada clique?

levimendes

Dá pra fazer sem o painel?

Hellmanss
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Application extends JPanel implements MouseListener{
	List<Point2D>points = new ArrayList<Point2D>();

	public Application(){
		this.addMouseListener(this);
		this.setVisible(true);
	}
	
	@Override
	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g.create();
		
		for(Point2D p: points){
			g2.drawOval(new Double(Math.round(p.getX())).intValue(),new Double( Math.round(p.getY())).intValue(), 10, 10);
		}
	}

	public void mouseClicked(MouseEvent arg0) {
		points.add(new Point2D.Float(arg0.getX(),arg0.getY()));
		repaint();
	}

	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}
	public void mousePressed(MouseEvent arg0) {}
	public void mouseReleased(MouseEvent arg0) {}
	
	
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		Application app = new Application();
		
		frame.setLocationRelativeTo(null);
		frame.setSize(400, 400);
		frame.getContentPane().add(app);
		frame.setVisible(true);
	}
}

Desculpa dar a resposta pronta, é que deu vontade de fazer :D

[i]*Está mal feito pra !@#$ mas funciona :S

levimendes

Valeu cara, melhor ainda, rsrsrs.
Abraços.

levimendes

só mais uma coisa (embora fuja deste tópico), por que vc fez

e não

:?: :?: :?: :?:

Criado 16 de abril de 2010
Ultima resposta 16 de abr. de 2010
Respostas 7
Participantes 3