Was genau ist der basicstroke (2dGraphics)?

uuqfowehui23

Aktives Mitglied
Also allgemein, was genau soll der Stroke sein?

1643833615541.png
Das konnte ich bei einem Artikel über den Stroke sehen, aber was soll das darstellen 😵?
Ich dachte immer, dass der Stroke nur die Strichstärke sei.
 
Hier mal ein Beispiel, das den Effekt am "lebenden Objekt" zeigt:
Java:
import java.awt.*;
import java.awt.geom.*;
import static java.awt.BasicStroke.*;
import static java.awt.RenderingHints.*;
import javax.swing.*;

public class Test {

    public void run() {
        JPanel panel = new JPanel() {
            Shape triangle = new Polygon(new int[]{-1,1,0}, new int[]{-1,-1,1}, 3);
            
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);

                g2.scale(getWidth()/6, getHeight()/6);
                g2.translate(1,1);
                for (int join : new int[]{JOIN_BEVEL, JOIN_MITER, JOIN_ROUND}) {
                    g2.setStroke(new BasicStroke(0.1f, CAP_SQUARE, join));
                    g2.draw(triangle);
                    g2.translate(2,0);
                }
            }
                
        };

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
Hier mal ein Beispiel, das den Effekt am "lebenden Objekt" zeigt:
Java:
import java.awt.*;
import java.awt.geom.*;
import static java.awt.BasicStroke.*;
import static java.awt.RenderingHints.*;
import javax.swing.*;

public class Test {

    public void run() {
        JPanel panel = new JPanel() {
            Shape triangle = new Polygon(new int[]{-1,1,0}, new int[]{-1,-1,1}, 3);
           
            public void paintComponent(Graphics g) {
                Graphics2D g2 = (Graphics2D) g;
                g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);

                g2.scale(getWidth()/6, getHeight()/6);
                g2.translate(1,1);
                for (int join : new int[]{JOIN_BEVEL, JOIN_MITER, JOIN_ROUND}) {
                    g2.setStroke(new BasicStroke(0.1f, CAP_SQUARE, join));
                    g2.draw(triangle);
                    g2.translate(2,0);
                }
            }
               
        };

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
Vielen Dank!
 
Der Stroke selbst ist natürlich mehr als nur diese eine Einstellung, beinhaltet z.B. auch die Linienstärke und ob das Ganze durchgehend ist oder strichliert oder einem anderen Muster folgend. Die API erklärt das ganz gut.
 

Zurück
Oben