# gestrichelte Linien bzw. Pfeile



## Malcolm X (28. Dez 2005)

Hallo, 

gibt es eine Möglichkeit gestrichelte Linien bzw. Pfeile in Java zu zeichnen.


----------



## André Uhres (28. Dez 2005)

```
/* Um eine gestrichelte Linie zu zeichnen, musst du den 
 * kompliziertesten Konstruktor von BasicStroke() 
 * benutzen und Werte für alle Attribute angeben. Zum Beispiel:
 */
            Stroke s = new BasicStroke(
                    4.0f,                      // Width
                    BasicStroke.CAP_SQUARE,    // End cap
                    BasicStroke.JOIN_MITER,    // Join style
                    10.0f,                     // Miter limit
                    new float[] {16.0f,20.0f}, // Dash pattern
                    0.0f);                     // Dash phase
                    g2d.setStroke(s);
                    g2d.drawLine(0,0,100,100);
```
PS: Um ein Punkt-Strich Muster zu zeichnen kannst du z.B. diesen Array benutzen: 
new float[] { 21.0f, 9.0f, 3.0f, 9.0f }, // Dot-Dash pattern


----------



## André Uhres (29. Dez 2005)

```
/*********************************************************************/ 
/*  Author   : Erik Krebs                                            */ 
/*  Datum    : 30.09.98                                              */ 
/*  Datei    : Pfeil.java                                            */ 
/*********************************************************************/ 
import java.awt.*; 
import javax.swing.*; 
class Pfeil { 
    private Math m; 
    private Point von, nach; // die zwei Punkte, die die Pfeil-Linie darstellen 
    private double phi;      // Rotationswinkel 
    private Polygon pfeil; 
    private double s;      // Seitenlaenge des Pfeils 
    private double xAlt, yAlt;          // x-,y-Werte vor der Rotation,relativ zur Pfeilspitze 
    private double xNeu, yNeu;          // x-,y-Werte nach der Rotation,absolut 
    private double xSpitze, ySpitze;    // x-,y-Werte der Pfeilspitze 
    public Pfeil(Point k1, Point k2, double length) { 
        von = k1; 
        nach = k2; 
        s = length;
        phi = m.atan( ((double)nach.y  -  (double)von.y ) / ((double)nach.x  -  (double)von.x ) ); 
        if(nach.x < von.x ) 
            phi = phi + m.PI; 
        // den Pfeil zeichnen 
        pfeil = new Polygon(); 
        pfeil.addPoint(nach.x , nach.y );  // Pfeilspitze 
        // Die beiden anderen Punkte des Pfeils muessen um den Winkel phi relative zur 
        // Pfeilspitze rotiert werden. 
        // x_rot = x*cos(phi) - y*sin(phi) 
        // y_rot = x*sin(phi) + y*cos(phi) 
        xSpitze = (double)nach.x; 
        ySpitze = (double)nach.y; 
        // erster Punkt 
        xAlt = (double)nach.x - s - xSpitze; 
        yAlt = (double)nach.y + s/2.5 - ySpitze; 
        xNeu = xAlt * m.cos(phi) - yAlt * m.sin(phi) + xSpitze; 
        yNeu = xAlt * m.sin(phi) + yAlt * m.cos(phi) + ySpitze; 
        pfeil.addPoint((int)xNeu, (int)yNeu); 
        // zweiter Punkt 
        yAlt = (double)nach.y - s/2.5 - ySpitze; 
        xNeu = xAlt * m.cos(phi) - yAlt * m.sin(phi) + xSpitze; 
        yNeu = xAlt * m.sin(phi) + yAlt * m.cos(phi) + ySpitze; 
        pfeil.addPoint((int)xNeu, (int)yNeu); 
        
    } 
    public void zeichnen(Graphics2D g) { 
        g.drawLine(von.x, von.y, nach.x , nach.y ); 
        g.fillPolygon(pfeil); 
    } 
    public static void main(String args[]) { 
        JFrame f = new JFrame("Pfeil Demo"); 
        final Pfeil pf1 = new Pfeil(new Point(150,50), new Point(250,100), 10.0d); 
        final Pfeil pf2 = new Pfeil(new Point(250,100), new Point(150,250), 10.0d); 
        final Pfeil pf3 = new Pfeil(new Point(150,250), new Point(50,200), 10.0d); 
        final Pfeil pf4 = new Pfeil(new Point(50,200), new Point(150,50), 10.0d); 
        final Stroke s = new BasicStroke(1.0f,   // Width 
                BasicStroke.CAP_SQUARE,    // End cap 
                BasicStroke.JOIN_MITER,    // Join style 
                10.0f,                     // Miter limit 
                new float[] {16.0f,10.0f}, // Dash pattern 
                0.0f);                     // Dash phase 
                
                JPanel p = new JPanel(){ 
                    public void paintComponent(Graphics g){ 
                        Graphics2D g2d = (Graphics2D)g; 
                        
                        g2d.setStroke(s); 
                        g2d.setColor(Color.blue); 
                        pf1.zeichnen(g2d); 
                        pf2.zeichnen(g2d); 
                        pf3.zeichnen(g2d); 
                        pf4.zeichnen(g2d); 
                    } 
                }; 
                f.getContentPane().add(p); 
                f.setSize(350, 350); 
                f.setLocationRelativeTo(null); 
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                f.setVisible(true); 
    } 
}
```


----------

