Esercizio per casa 4E Informatica

trasformazioni-di-coordinate

Migliorare il programma visto in classe inserendo le etichette dei numeri sugli assi cartesiani: -2 -1 0 1 2 3 4 etc. distanziate di 40 pixel; fare in modo che alla pressione del mouse vengano visualizzate le coordinate con il corretto fattore di scala coerente con le etichette inserite. Listato:

package it.liceocuneo.math;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.Serializable;

import javax.swing.JPanel;

public class JOxy extends JPanel implements Serializable, MouseListener {

	private String titleX = "X", titleY = "Y";
	private boolean visibile = false;
	private int posX = 0, posY = 0;

	public JOxy() {
		this.setPreferredSize(new Dimension(200, 200));
		this.setBackground(Color.WHITE);
		this.addMouseListener(this);
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		int w = this.getWidth(), h = this.getHeight();
		int w2 = w / 2, h2 = h / 2;

		g.setColor(Color.BLACK);
		g.drawLine(0, h2, w - 1, h2);
		g.drawLine(w2, 0, w2, h - 1);

		g.drawString(titleX, w - 10, h2 - 5);
		g.drawString(titleY, w2 + 5, 15);

		if (visibile) {
			int xReale = posX - w2;
			int yReale = h2 - posY;
			g.drawString("(" + xReale + "," + yReale + ")", posX + 10, posY + 5);
		}
	}

	public String getTitleX() {
		return titleX;
	}

	public void setTitleX(String titleX) {
		this.titleX = titleX;
	}

	public String getTitleY() {
		return titleY;
	}

	public void setTitleY(String titleY) {
		this.titleY = titleY;
	}

	@Override
	public void mouseClicked(MouseEvent arg0) { }

	@Override
	public void mouseEntered(MouseEvent arg0) { }

	@Override
	public void mouseExited(MouseEvent arg0) { }

	@Override
	public void mousePressed(MouseEvent arg0) {
		posX = arg0.getX();
		posY = arg0.getY();
		visibile = true;
		repaint();
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		visibile = false;
		repaint();
	}

}