Java Programming‎ > ‎Graphics 2D‎ > ‎

Penggunaan BasicStroke pada Java2D

posted Nov 21, 2011, 9:24 PM by Editor KursusInternet   [ updated Dec 31, 2011, 4:16 AM ]
Stroke adalah objek pada Java2D yang berfungsi sebagai "mata pensil / pena" yang digunakan untuk menggambar. Stroke memiliki berbagai macam style / bentuk yang dapat kita pilih sehingga menentukan komposisi garis bentuk akhir dari gambar kita.

Pengaturan stroke pada Java bisa dilakukan untuk 2 atribut, yaitu :

Class BasicStroke

Pada class BasicStroke kita menentukan ketebalan dan atribut lainnya dengan beberapa constructor, diantaranya adalah :
  • BasicStroke() : Constructs a new BasicStroke with defaults for all attributes.
  • BasicStroke(float width) : menghasilkan objek BasicStroke dengan ketebalan width.
  • BasicStroke(float width, int cap, int join) : menghasilkan objek BasicStroke dengan spesifikasi atribut width, cap dan join (keterangan menyusul di bawah).
  • BasicStroke(float width, int cap, int join, float miterlimit) :  menghasilkan objek BasicStroke dengan spesifikasi atribut width, cap , join, dan miterlimit (keterangan menyusul di bawah).
  • BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase)  : menghasilkan objek BasicStroke dengan spesifikasi atribut width, cap , join, dan miterlimit (keterangan menyusul di bawah).
Terlihat di atas ada beberapa atribut lain selain width. Keterangan untuk atribut-atribut tersebut adalah sebagai berikut :
  • cap : bentuk dekorasi pada ujung titik stroke.
  • join : adalah bentuk yang terjadi ketika dua titik ujung garis bertemu.
  • miterlimit : batas untuk melakukan pemotongan miter join.
  • dash : adalah array dari nilai numerik float yang menentukan pola isi dan spasi dari garis / stroke.
  • dash_phase : offset atau jarak dimulainya penggunaan dash.
Untuk lebih jelasnya dari visualisasi mengenai perilaku dari atribut-atribut yang tersebut di atas silahkan kunjungi halaman website http://docstore.mik.ua/orelly/java-ent/jfc/ch04_05.htm.

Contoh Penggunaan

Untuk lebih jelas penggunaannya, maka berikut ini adalah code Java yang menggambar beberapa lingkaran dan segitiga dengan berbagai bentuk stroke.

PenggunaanStroke.java

package com.kursusinternet.graphics;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PenggunaanStroke extends JPanel {
  private static final long serialVersionUID = 1L;

  public void gambar(Graphics g)
  {
    Graphics2D g2d = (Graphics2Dg;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
    BasicStroke bs1 = new BasicStroke(5)
    BasicStroke bs2 = new BasicStroke(
        8
        BasicStroke.CAP_SQUARE, 
        BasicStroke.JOIN_ROUND
    )
    BasicStroke bs3 = new BasicStroke(
        8
        BasicStroke.CAP_BUTT, 
        BasicStroke.JOIN_BEVEL
    )
    BasicStroke bs4 = new BasicStroke(
        5
        BasicStroke.CAP_BUTT, 
        BasicStroke.JOIN_BEVEL,
        2,
        new float[] {10f10f},
        1.0f
    )
    BasicStroke bs5 = new BasicStroke(
        5
        BasicStroke.CAP_BUTT, 
        BasicStroke.JOIN_BEVEL,
        2,
        new float[] {10f10f},
        10.0f
    );



    int xstart = 10;
    int width = 50;
    g2d.setPaint(Color.BLUE);
    g2d.setStroke(bs1);
    g2d.draw(new Ellipse2D.Double(xstart, 10100100));

    int x[] {xstart, xstart+width, xstart+(2*width)};
    int y[] {250150250};
    g2d.setPaint(Color.BLUE);
    g2d.setStroke(bs1);    
    g2d.draw(new Polygon(x,y,x.length));    
    
    xstart = 130;
    g2d.setPaint(Color.RED);
    g2d.setStroke(bs2);
    g2d.draw(new Ellipse2D.Double(13010100100));

    x = new int[] {xstart, xstart+width, xstart+(2*width)};
    g2d.draw(new Polygon(x,y,x.length));    

    xstart = 250;
    g2d.setPaint(Color.GREEN.darker());
    g2d.setStroke(bs3);
    g2d.draw(new Ellipse2D.Double(xstart, 10100100));

    x = new int[] {xstart, xstart+width, xstart+(2*width)};
    g2d.draw(new Polygon(x,y,x.length));    
    
    xstart = 370;
    g2d.setPaint(Color.MAGENTA);
    g2d.setStroke(bs4);
    g2d.draw(new Ellipse2D.Double(xstart, 10100100));

    x = new int[] {xstart, xstart+width, xstart+(2*width)};
    g2d.draw(new Polygon(x,y,x.length));    

    xstart = 490;
    g2d.setPaint(Color.ORANGE);
    g2d.setStroke(bs5)
    g2d.draw(new Ellipse2D.Double(49010100100));

    x = new int[] {xstart, xstart+width, xstart+(2*width)};
    g2d.draw(new Polygon(x,y,x.length));    
  }

  public void paintComponent(Graphics g) {
    clear(g);
    gambar(g);
  }

  protected void clear(Graphics g) {
    super.paintComponent(g);
  }

  public static void main(String[] args) {
    PenggunaanStroke panelGambar = new PenggunaanStroke();
    JFrame frameGambar = new JFrame("Penggunaan Stroke");
    frameGambar.setSize(650300);
    panelGambar.setBackground(Color.white);
    frameGambar.setContentPane(panelGambar);
    frameGambar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frameGambar.setVisible(true);
  }
}


Hasil Eksekusi

Screenshot berikut adalah hasil eksekusi dari kode Java di atas.


Dan perhatikan beberapa highlight perbedaan yang terjadi pada berbagai definisi bentuk stroke pada gambar berikut.


Sumber Referensi

Comments