PAINTING AND STROKING
Painting Pada pembahasan sebelumnya, kita telah melihat bagaimana bentuk-bentuk dari bidang grafis yang dibangun dengan API 2D. Tetapi apa yang akan anda lakukan dengan bentuk bidang grafis tersebut ? Painting adalah proses filling (pengisian) pada tampilan objek grafis dengan warna, color gradient (pencampuran warna), atau texture (warna berkontur). Stroking adalah proses dari penggambaran sebuah garis bidang grafis. Anda dapat menggambar sebuah garis menggunakan lebar garis, jenis garis dan warna garis yang berbeda-beda.
Di sebelah kiri, ada sebuah lingkaran yang telah terisi dengan gradien color. Ditengah, sebuah lingkaran yang dimana garisnya diberi warna yang penuh (solid color) yang membuat telihat tebal. Dikanan, sebuah lingkaran dengan garis yang digambar dalam bentuk garis yang sama hanya saja garis tersebut di beri efek color gradient. Adapun kelas-kelas yang memproduksi gambar diatas menggunakan metode dan kelas seperti : setPaint(), setStroke(), GradientPaint dan BasicStroke.
setPaint() import java.awt.Color; import java.awt.Container; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import javax.swing.JComponent; import javax.swing.JFrame; public class MainClass{ public static void main(String[] args) { JFrame jf = new JFrame("Demo"); Container cp = jf.getContentPane(); MyCanvas tl = new MyCanvas(); cp.add(tl); jf.setSize(300, 200); jf.setVisible(true); } } class MyCanvas extends JComponent { public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; Ellipse2D e = new Ellipse2D.Float(40, 40, 120, 120); GradientPaint gp = new GradientPaint(75, 75, Color.white, 95, 95, Color.gray, true); g2.setPaint(gp); g2.fill(e); } }
setStroke() } } class MyCanvas extends JComponent { Shape shape; public MyCanvas() { shape = create(); } protected Shape create() { float cm = 72 / 2.54f; return new Rectangle2D.Float(cm, cm, 2 * cm, cm); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; Stroke stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[] { 3, 1 }, 0); g2.setStroke(stroke); g2.setPaint(Color.black); g2.draw(shape); } } import java.awt.BasicStroke; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; import javax.swing.JFrame; public class MainClass{ public static void main(String[] args) { JFrame jf = new JFrame("Demo"); Container cp = jf.getContentPane(); MyCanvas tl = new MyCanvas(); cp.add(tl); jf.setSize(300, 200); jf.setVisible(true);
GradientPaint import java.awt.BasicStroke; import java.awt.Color; public void init() { setBackground(Color.white); setForeground(Color.white); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setPaint(Color.gray); int x = 5; int y = 7; // fill RoundRectangle2D.Double GradientPaint redtowhite = new GradientPaint(x, y, Color.red, 200, y, Color.blue); g2.setPaint(redtowhite); g2.fill(new RoundRectangle2D.Double(x, y, 200, 200, 10, 10)); g2.setPaint(Color.black); g2.drawString("Filled RoundRectangle2D", x, 250); } public static void main(String s[]) { JFrame f = new JFrame(""); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); JApplet applet = new GradientPaintDemo2D(); f.getContentPane().add("Center", applet); applet.init(); f.pack(); f.setSize(new Dimension(300, 300)); f.show(); } import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Arc2D; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import javax.swing.JApplet; import javax.swing.JFrame; public class GradientPaintDemo2D extends JApplet {
BasicStroke. public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setStroke(new BasicStroke(3.0f)); g2.setPaint(Color.blue); Rectangle r = new Rectangle(5,5,200,200); g2.draw(r); } public static void main(String s[]) { JFrame f = new JFrame(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); BasicStrokeDemo p = new BasicStrokeDemo(); f.getContentPane().add("Center", p); p.init(); f.pack(); f.setSize(new Dimension(250, 250)); f.show(); } } import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class BasicStrokeDemo extends JPanel { public void init() { setBackground(Color.white); }
Solid Color Kelas java.awt.Color diimplementasikan ke antarmuka Paint. Dengan demikian jenis Color apa saja dapat digunakan untuk mengisi bidang dari sebuah shape. penanganan dari proses pewarnaan adalah kemungkinan besar yang dapat terus dikembangkan. Pada saat ini, perhatikan kelas-kelas dari Color yang menyertakan beberapa penamaan warna sebagai variabel static : public static final Color white; public static final Color lightGray; public static final Color gray; public static final Color darkGray; public static final Color black; public static final Color red; public static final Color pink; public static final Color orange; public static final Color yellow; public static final Color green; public static final Color magenta; public static final Color cyan;
Solid Color Anda dapat menciptakan warna menggunakan nilai integer atau float : Public Color (int r, int g, int b) Konstruktor ini menciptakan Color yang baru menggunakan nilai yang dispesifikasikan untuk red, green dan blue. Nilai tersebut haruslah dalam rentang dari dan sampai 255. Public Color(float r, float g, float b) Konstruktor ini menciptakan Color yang baru dengan menggunakan nilai dari red, green dan blue. Nilai yang akan dipakai haruslah berada dalam rentang dari 0,0 sampai 1,0.
Solid Color import java.awt.*; import java.awt.geom.*; public class SolidPaint extends ApplicationFrame { public static void main(String[] args) SolidPaint f = new SolidPaint(); f.setTitle("SolidPaint v1.0"); f.setSize(200, 200); f.center(); f.setVisible(true); } public void paint(Graphics g)
Swing Color Chooser Dialog Public static Color showDialog(Component component, String title, Color initialColor) Metode ini menampilkan dialog dari pilihan warna. Component yang disuplai digunakan sebagai komponen parent dari dialog tersebut. Dialog yang ada akan mensuplai title; pengaturan ini akan diinisialisasikan agar dpat menunjukkan initialColor yang sudah diberikan.
{public void actionPerformed(ActionEvent ae) {Color c = JColorChooser.showDialog (RedTown.this, "Choose a color...“, getBackground()); if (c != null) getContentPane(). setBackground(c); }}); addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent we) { System.exit(0); } import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RedTown extends JFrame { public static void main(String[] args) new RedTown(); } public RedTown() super("RedTown v1.0"); createUI(); setVisible(true); protected void createUI() setSize(400, 400); setLocation(100, 100); getContentPane().setLayout(new GridBagLayout()); JButton colorButton = new JButton("Choose a color..."); getContentPane().add(colorButton); colorButton.addActionListener(new ActionListener()