2017-09-11 7 views
0

Je suis frappé par ce qui semble être un problème mineur. J'ai essayé d'ajouter MouseListener à l'objet Line2D mais cela ne fonctionne pas. Est-ce que la méthode ou essayé est invalide ou je peux le faire d'une autre manière. Aidez-moi à comprendre ce que je fais mal ici.Ajout de MouseListener à l'objet graphique

public class DrawingLines { 
    public static void main(String[] args){ 
     LineFrame lf = new LineFrame(); 
     lf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     lf.setVisible(true); 

    } 
} 

class LineFrame extends JFrame{ 
    public LineFrame(){ 
     setTitle("Line test"); 
     setSize(500, 500); 

     LinesPanel lp = new LinesPanel(); 
     Container contentpane = getContentPane(); 
     contentpane.add(lp); 

    } 
} 

class LinesPanel extends JPanel{ 
    public LinesPanel(){ 

    } 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D)g; 
     Line2D line = new Line2D.Double(105.5, 306.6, 350.8, 4.9); 
     g2.draw(line); 
     line.addMouseListener(new MouseListener(){ 
      @Override 
      public void mouseClicked(MouseEvent e) { 
       System.out.println("Line Clicked !"); 
      } 

      @Override 
      public void mousePressed(MouseEvent e) { 
      } 

      @Override 
      public void mouseReleased(MouseEvent e) { 
      } 

      @Override 
      public void mouseEntered(MouseEvent e) { 
      } 

      @Override 
      public void mouseExited(MouseEvent e) { 
      } 

     }); 

     } 
} 

Répondre

1

Ajoutez le MouseListener au LinesPanel. Et utilisez les coordonnées MouseEvent pour vérifier si le clic est proche de la ligne.

Voir How to select a line

0

Le composant de ligne ne dispose pas d'une zone cliquable donc un MouseListener ne fonctionnera pas correctement, ce que vous pouvez faire est d'ajouter un carré invisible/rectangle/polygone dessus pour manipuler la souris au lieu.