Capire le grafiche

di il
4 risposte

Capire le grafiche

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?

4 Risposte

  • Re: Capire le grafiche

    cuta82 ha scritto:


    Il mio obbiettivo è cliccare su tutte le linee, perché il mio progetto originale contiene numerose linee.
    Che dovrei fare?
    Partiamo allora innanzitutto con una questione più basilare: il tuo MyArrow è un "componente"; hai tolto il layout manager al content pane di JFrame (=posizionamento "assoluto") e appunto hai posizionato/dimensionato i due MyArrow in modo che si sovrappongano. Ecco: già questo è inappropriato!
  • Re: Capire le grafiche

    Ciao andbin,
    grazie della risposta!
    Adesso ho capito il problema, ma come faccio per disegnare MyArrow sul JFrame e contemporaneamente dare la possibiltà di essere cliccato? Questo mi è poco chiaro.
  • Re: Capire le grafiche

    cuta82 ha scritto:


    ciao andbin,
    grazie della risposta!
    Adesso ho capito il problema, ma come faccio per disegnare MyArrow sul JFrame e contemporaneamente dare la possibiltà di essere cliccato? Questo mi è poco chiaro.
    Ok, in questo momento non posso, per motivi di tempo, darti una spiegazione più lunga e approfondita della questione e delle possibili soluzioni.
    Posso però suggerirti di guardare tra i miei Java Examples (vedi mia firma), in particolare l'esempio "Shapes Hover Draw" (sono solo 3 sorgenti Java). Mostra come disegnare N shape (figure) su un pannello e come riconoscere gli eventi del mouse sulle figure (nel mio esempio solo se il mouse si trova dentro o fuori le figure muovendo il mouse).
  • Re: Capire le grafiche

    Ottimo sito!
    Allora, intanto spulcio tra i files...
Devi accedere o registrarti per scrivere nel forum
4 risposte