import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JComponent; public class JOxy extends JComponent { private int sx, sy, tx, ty; private String asseX, asseY; private double xMouse, yMouse; private class AscoltaMouse extends MouseMotionAdapter { public void mouseMoved(MouseEvent e) { int x=e.getX(); int y=e.getY(); xMouse=xr(x); yMouse=yr(y); repaint(); } } public JOxy() { setPreferredSize(new Dimension(400, 400)); setSx(50); setSy(50); setTx(100); setTy(100); setAsseX("X"); setAsseY("Y"); addMouseMotionListener(new AscoltaMouse()); } public int xg(double x) { return (int) Math.round(tx + x * sx); } public int yg(double y) { return (int) Math.round(getHeight() - 1 - ty - y * sy); } public double xr(int x) { return (double) (x - tx) / sx; } public double yr(int y) { return (double) (getHeight() - 1 - ty - y) / sy; } public void paintComponent(Graphics g) { int w = getWidth() - 1; int h = getHeight() - 1; g.setColor(Color.WHITE); g.fillRect(0, 0, w, h); g.setColor(Color.BLACK); // asse X g.drawLine(0, yg(0), w, yg(0)); for (int i = (int) xr(0); i <= (int) xr(w); i++) { g.drawLine(xg(i), yg(0) - 5, xg(i), yg(0) + 5); g.drawString(i + "", xg(i) + 3, yg(0) - 3); } g.drawString(asseX, w - 5 - g.getFontMetrics().stringWidth(asseX), yg(0) - 20); // asse Y g.drawLine(xg(0), 0, xg(0), h); for (int i = (int) yr(h); i <= yr(0); i++) { g.drawLine(xg(0) - 5, yg(i), xg(0) + 5, yg(i)); g.drawString(i + "", xg(0) + 3, yg(i) - 3); } g.drawString(asseY, xg(0) + 20, 15); g.drawString("("+xMouse+","+yMouse+")", xg(xMouse), yg(yMouse)); } public int getSx() { return sx; } public void setSx(int sx) { if (sx < 20) sx = 20; this.sx = sx; } public int getSy() { return sy; } public void setSy(int sy) { if (sy < 20) sy = 20; this.sy = sy; } public int getTx() { return tx; } public void setTx(int tx) { if (tx < 0) tx = 0; this.tx = tx; } public int getTy() { return ty; } public void setTy(int ty) { if (ty < 0) ty = 0; this.ty = ty; } public String getAsseX() { return asseX; } public void setAsseX(String asseX) { this.asseX = asseX; } public String getAsseY() { return asseY; } public void setAsseY(String asseY) { this.asseY = asseY; } }