Salve,
ho un problema con le grafiche.
Io disegno due o più linee sullo sfondo, ogni linea possiede un ascoltatore del mouse, ma non riesco ad ascoltare tutte le linee.
Qui potete trovare il mio esempio:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import javax.swing.JFrame;
class Main {
public static void main(String[] args) {
new Main().run();
}
private void run() {
Dimension d = new Dimension(500, 400);
//FRAME
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setSize(d);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
//ARROWS
MyArrow arr1 = new MyArrow(d, "arr1", Color.RED, new Point(100, 100), new Point(200, 200));
MyArrow arr2 = new MyArrow(d, "arr2", Color.BLUE, new Point(100, 200), new Point(200, 100));
//POPULATE
frame.add(arr1);
frame.add(arr2);
}
}
e la linea è fatta così:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Line2D;
import javax.swing.JComponent;
public class MyArrow extends JComponent implements MouseListener {
private Point p1;
private Point p2;
private Dimension frame;
private Color color;
private String name;
public MyArrow(Dimension frame, String name, Color color, Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
this.frame = frame;
this.color = color;
this.name = name;
setLocation(0, 0);
setSize(frame);
addMouseListener(this);
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(color);
g2.draw(new Line2D.Double(p1, p2));
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("You have clicked the arrow: " + name);
}
@Override
public void mousePressed(MouseEvent e) { }
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
}
Il risultato sulla console è: "You have clicked the arrow: arr1".
Il mio obbiettivo è cliccare su tutte le linee, perché il mio progetto originale contiene numerose linee.
Che dovrei fare?