2015-02-25 2 views
0

J'écris un programme Java pour dessiner un triangle avec des sommets qui sont spécifiés par les clics de souris de l'utilisateur. Jusqu'à présent, j'ai obtenu chaque paire de coordonnées dans un tableau, appelé points, mais j'ai du mal à dessiner le triangle.Dessiner Triangle en Java en utilisant MouseClicked

Voyant que les paires de coordonnées sont de type float et la méthode drawLine() nécessite int, est-il possible que je pourrais tracer les lignes en utilisant float, ou dois-je les convertir en int?

code

 public void mouseClicked(MouseEvent e) { 
      int left = DrawingPanel.iX(-rWidth/2), right = DrawingPanel.iX(rWidth/2); 
      int top = DrawingPanel.iY(rHeight/2), bot = DrawingPanel.iY(-rHeight/2); 

      if(!(e.getX() > right || e.getX() < left || 
        e.getY() < top || e.getY() > bot)) { 
       clickCount++; 
       if(clickCount >= 4) { 
        DrawingPanel.points[3] = new Point(e.getX(), e.getY()); 
        DrawingPanel.ready = true; 
        drawingPanel.repaint(); 
       } 
       else { 
        DrawingPanel.points[clickCount - 1] = new Point(e.getX(), e.getY()); 
       } 
      } 
      else 
       JOptionPane.showMessageDialog(frame, "Must click inside red rectangle. Try again."); 
     } 
    }); 

DrawingPanel est une classe que j'ai créé pour dessiner le triangle.

+0

Cela pourrait être utile: http://sourceforge.net /p/tus/code/HEAD/tree/tjacobs/ui/shape/BuildPolygon.java – ControlAltDel

Répondre

1

suppose donc que vous avez une classe appelée DrawingPanel qui s'étend Component d'une certaine façon et une instance de cette classe appelée drawingPanel dont vous appelez la méthode repaint().
Tout d'abord je ne recommanderais pas d'accéder à tout le Suff pour drawingPanel d'une manière statique, mais juste comme une note de côté.

Si vous souhaitez dessiner un triangle, vous devrez remplacer la méthode paint(Graphics g) dans votre classe DrawingPanel.
vous dans le coller DrawingPanel classe devrait faire l'affaire:

@Override 
public void paint(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 

    // This line is optional. It makes the edges of the triangle much smoother. 
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

    // Give the triangle whatever color you want. 
    g2.setColor(Color.BLACK); 

    int[] x = new int[3]; 
    int[] y = new int[3]; 
    for (int i = 0; i < 3; i++) { 
     Point p = points[i]; 
     x[i] = (int)p.getX(); 
     y[i] = (int)p.getY(); 
    } 
    // Alternatively use g2.drawPolygon to just draw the outlines 
    g2.fillPolygon(x, y, 3); 

    g2.dispose(); 
} 

(. Je n'ai pas testé le code que je l'espère fonctionne.)

0

Vous devriez pouvoir utiliser Point.x Point.y pour tracer votre triangle. Vous n'avez pas besoin de jouer avec int et float.

+0

Désolé, j'aurais dû préciser que j'ai créé une classe appelée 'Point' où les deux entrées sont' float x' et 'float y' – Delfino