Classe da completare a casa: JRetta

Creare JRetta sottoclasse di JOxy avente i due attributi “m” e “q” che disegna all’interno di un sistema di riferimento il grafico della retta in forma esplicita.

package it.liceocuneo.math;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.Serializable;

import javax.swing.JPanel;

public class JOxy extends JPanel implements Serializable {

	private String titleX = "X", titleY = "Y";
	private int scaleX = 40, scaleY = 40;
	private int traslX = 10, traslY = 10;

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

	public int xg(double xr) {
		return (int) Math.round(this.getWidth() * traslX / 100 + xr * scaleX);
	}

	public int yg(double yr) {
		return (int) Math.round(this.getHeight() * (100 - traslY) / 100 - yr * scaleY);
	}

	public double xr(int xg) {
		return (xg - this.getWidth() * traslX / 100) / (double) scaleX;
	}

	public double yr(int yg) {
		return (this.getHeight() * (100 - traslY) / 100 - yg) / (double) scaleY;
	}

	public double getMinX() {
		return xr(0);
	}

	public double getMaxX() {
		return xr(this.getWidth());
	}

	public double getMinY() {
		return yr(this.getHeight());
	}

	public double getMaxY() {
		return yr(0);
	}

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

		int w = this.getWidth(), h = this.getHeight();

		// asse X
		g.drawLine(0, yg(0), w, yg(0));
		for (int i = (int) getMinX(); i <= (int) getMaxX(); i++) {
			g.drawLine(xg(i), yg(0) - 5, xg(i), yg(0) + 5);
			g.drawString(i + "", xg(i) - g.getFontMetrics().stringWidth(i + "") / 2, yg(0) + 5 + g.getFontMetrics().getAscent());
		}
		g.drawString(titleX, w - 5 - g.getFontMetrics().stringWidth(titleX), yg(0) - 10);

		// asse Y
		g.drawLine(xg(0), 0, xg(0), h);
		for (int i = (int) getMinY(); i <= (int) getMaxY(); i++) {
			g.drawLine(xg(0) - 5, yg(i), xg(0) + 5, yg(i));
			g.drawString(i + "", xg(0) - 7 - g.getFontMetrics().stringWidth(i + ""), yg(i) - 1 + g.getFontMetrics().getAscent() / 2);
		}
		g.drawString(titleY, xg(0) + 10, 15);
	}

	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;
	}

	public int getScaleX() {
		return scaleX;
	}

	public void setScaleX(int scaleX) {
		if (scaleX >= 20)
			this.scaleX = scaleX;
	}

	public int getScaleY() {
		return scaleY;
	}

	public void setScaleY(int scaleY) {
		if (scaleY >= 20)
			this.scaleY = scaleY;
	}

	public int getTraslX() {
		return traslX;
	}

	public void setTraslX(int traslX) {
		this.traslX = traslX;
	}

	public int getTraslY() {
		return traslY;
	}

	public void setTraslY(int traslY) {
		this.traslY = traslY;
	}

}