package assicartesiani; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JComponent; public class JOxy extends JComponent { private int scalaX, scalaY, traslX, traslY; private String asseX, asseY; public JOxy() { setPreferredSize(new Dimension(400, 400)); setScalaX(50); setScalaY(50); setTraslX(40); setTraslY(40); setAsseX("X"); setAsseY("Y"); } public int xg(double x) { return (int) Math.round(getTraslX() + x * getScalaX()); } public int yg(double y) { return (int) Math.round(getHeight() - 1 - getTraslY() - y * getScalaY()); } public double xr(int x) { return (double) (x - getTraslX()) / getScalaX(); } public double yr(int y) { return (double) (getHeight() - 1 - getTraslY() - y) / getScalaY(); } @Override public void paintComponent(Graphics g) { int w = getWidth() - 1; int h = getHeight() - 1; Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setFont(getFont()); FontMetrics fm = g2.getFontMetrics(); g2.setColor(getBackground()); g2.fillRect(0, 0, w, h); g2.setColor(getForeground()); // asse x g2.drawLine(0, yg(0), w, yg(0)); g2.drawLine(w - 20, yg(0) - 10, w, yg(0)); g2.drawLine(w - 20, yg(0) + 10, w, yg(0)); for (int x = -getTraslX() / getScalaX(); x < (w - getTraslX()) / getScalaX(); x++) { g2.drawLine(xg(x), yg(0) - 5, xg(x), yg(0) + 5); String xs = x + ""; g2.drawString(xs, xg(x) - fm.stringWidth(xs) / 2, yg(0) + 5 + fm.getHeight()); } g2.drawString(getAsseX(), w - 5 - fm.stringWidth(getAsseX()), yg(0) - 15 - fm.getDescent()); // asse y g2.drawLine(xg(0), h, xg(0), 0); g2.drawLine(xg(0) - 10, 20, xg(0), 0); g2.drawLine(xg(0) + 10, 20, xg(0), 0); for (int y = -getTraslY() / getScalaY(); y < (h - getTraslY()) / getScalaY(); y++) { g2.drawLine(xg(0) - 5, yg(y), xg(0) + 5, yg(y)); String ys = y + ""; g2.drawString(ys, xg(0) - 10 - fm.stringWidth(ys), yg(y) + fm.getAscent() / 2); } g2.drawString(getAsseY(), xg(0) + 15, fm.getHeight()); } public int getScalaX() { return scalaX; } public final void setScalaX(int scalaX) { if (scalaX >= 20) { this.scalaX = scalaX; repaint(); } } public int getScalaY() { return scalaY; } public final void setScalaY(int scalaY) { if (scalaY >= 20) { this.scalaY = scalaY; repaint(); } } public int getTraslX() { return traslX; } public final void setTraslX(int traslX) { if (traslX >= 0) { this.traslX = traslX; repaint(); } } public int getTraslY() { return traslY; } public final void setTraslY(int traslY) { if (traslY >= 0) { this.traslY = traslY; repaint(); } } public String getAsseX() { return asseX; } public final void setAsseX(String asseX) { if (asseX != null) { this.asseX = asseX; } else { this.asseX = ""; } } public String getAsseY() { return asseY; } public final void setAsseY(String asseY) { if (asseY != null) { this.asseY = asseY; } else { this.asseY = ""; } } }