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