Arsip dari Lab

wait and see

Bintang part II

Melanjutkan contoh dari Bintang I, kali ini kita akan mencoba membuat 50 bintang bertaburan (letaknya bebas), warna-warni, berbeda ukuran, dan berbeda segi. Berikut ini adalah source code-nya :

class untuk Kanvas :

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Kanvas
{   public static void main(String[] args)
    {   SwingUtilities.invokeLater(new Runnable()
        {   public void run()
            {   JFrame frame = new JFrame("Sekarang pake Label");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Bintang3 t = new Bintang3();
                t.setPreferredSize(new Dimension(600, 600));
                frame.getContentPane().add(t);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }    
}

class untuk gambar Bintang :

import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
class Bintang3 extends JPanel
{   static double degToRad(int deg) {
        return ((2*3.14)/360)*deg;
    }
    public void paintComponent(Graphics g)
    {   super.paintComponent(g);
        Random acak = new Random();
        Color[] warna={Color.red, Color.blue, Color.black, Color.cyan,
            Color.yellow, Color.green, Color.orange, Color.pink};
        int r, segi, x0, y0;
        for(int i=0;i<50;i++)
        {   r=acak.nextInt(90)+10;
            segi=acak.nextInt(10)+5;
            x0=acak.nextInt(300)+100;
            y0=acak.nextInt(300)+100;
            gbrBintang(g, r, segi, x0, y0, warna[i%8]);
        }
    }
    private void gbrBintang(Graphics g,int r,int segi,int x0,
                                          int y0,Color warna)
    {   int[] x=new int[segi];
        int[] y=new int[segi];
        int sudut=(int)360/segi;
        for(int i=0;i<segi;i++)
        {   x[i]=(int)Math.round(x0 + r * Math.cos(degToRad(sudut * i-90)));
            y[i]=(int)Math.round(y0 + r * Math.sin(degToRad(sudut * i-90)));
        }
        g.setColor(warna);
        for(int i=0;i<segi-1;i++)
            for(int j=i+2;j<segi;j++){
                if(i==0 && j==segi-1) continue;
                g.drawLine(x[i], y[i], x[j], y[j]);
            }
    }
}
Butuh penjelasan...??? Silahkan bertanya.

Bintang part I

Semudah apakah membuat garis yang membentuk bintang itu ? Mari kita perhatikan source code-nya.


- class sinTest sebagai kanvas untuk meletakkan grafik bintang.
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class sinTest
{   public static void main(String[] args)
    {   SwingUtilities.invokeLater(new Runnable()
        {   public void run()
            {   JFrame frame = new JFrame("Sekarang pake Label");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Bintang1 t = new Bintang1();
                t.setPreferredSize(new Dimension(300, 200));
                frame.getContentPane().add(t);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }    
}



- class Bintang1 sebagai class yang menarik garis-garis sehingga membentuk sebuah bintang.
import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
class Bintang1 extends JPanel
{   static double degToRad(int deg) {
        return ((2*3.14)/360)*deg;
    }
    public void paintComponent(Graphics g)
    {   int[] x=new int[20];
        int[] y=new int[20];
        super.paintComponent(g);
        int r=100, x0=100, y0=100;
        int sudut=(int)360/5;
        for(int i=0;i<5;i++)
        {   x[i]=(int)Math.round(x0 + r * Math.cos(degToRad(sudut * i)));
            y[i]=(int)Math.round(y0 + r * Math.sin(degToRad(sudut * i)));
        }
        for(int i=0;i<5-1;i++)
            for(int j=i+2;j<5;j++){
                if(i==0 && j==4) continue;
                g.drawLine(x[i], y[i], x[j], y[j]);
            }
    }
}



Inilah output-nya.


Penjelasan...??? Silahkan ajukan pertanyaan jika merasa aneh dengan source code di atas.

Sketsa Bunga

Seperti halnya melukis, selalu diawali dengan membuat suatu sketsa untuk menghasilkan lukisan yg indah. Contoh kali ini sedikit mengulang bahasan mengenai konsep OOP (menggunakan beberapa objek) dan kalkulus (trigonometri). Perhatikan contoh berikut :
import javax.swing.JPanel;
import java.awt.*;

class Bunga extends JPanel
{   static double degToRad(int deg) {
        return ((2*3.14)/360)*deg;
    }
    public void paintComponent(Graphics g)
    {   int r=50; //radius (jari-jari atau panjang garis bunga)
        int[] x=new int[20];
        int[] y=new int[20];
        super.paintComponent(g);
        for(int i=0;i<7;i++)
        {   x[i]=(int) Math.round(100-r*Math.cos(degToRad((i*15)+45)));
            y[i]=(int) Math.round(100-r*Math.sin(degToRad((i*15)+45)));
            g.drawLine(100,100,x[i],y[i]);
        }            
        g.drawLine(100,100,100,150);
    }
}
Dalam melukis tentunya kita membutuhkan kanvas sebagai wadah dari lukisan yang kita buat.
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class sinTest
{   public static void main(String[] args)
    {   SwingUtilities.invokeLater(new Runnable()
        {   public void run()
            {   JFrame frame = new JFrame("Sekarang pake Label");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Bunga b = new Bunga();
                b.setPreferredSize(new Dimension(300, 200));
                frame.getContentPane().add(b);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }    
}
Klik di sini untuk lihat outputnya

Yuk kita bahas yuk...
Source Code Review (Klik di sini)
...bersambung...tapi kalau tidak sabar silahkan ajukan pertanyaan...

Grafik Garis (Pertemuan I)

Contoh pembuatan grafik garis. Dijelaskan pada pertemuan pertama. Menggambarkan sebuah persegi panjang yg diisi dg garis-garis yg membentuk suatu grafik.

Grafiknya seperti ini


import java.awt.*;
import java.awt.event.*;

public class gambarGrafik extends Frame{
    public static void main(String[]args){
        new gambarGrafik( );
    }

    public gambarGrafik( ){
        super("Java 2D Example");
        setSize(600,400); //mengatur ukuran Frame (panjangX, lebarY)
        setVisible(true); //mengatur supaya Frame terlihat atau ditampilkan
        addWindowListener(new WindowAdapter( ){
        //Listener atau action saat close button di klik
            public void windowClosing(WindowEvent e){
                dispose(); //menyembunyikan Frame
                System.exit(0); //menghentikan eksekusi program
            }
        });
    }

    public void paint(Graphics g){
        int [] y = {25, 65, 75, 100, 175, 210, 160, 155, 200, 170, 220};
        g.setColor(Color.gray);
        for(int i=0;i<5;i++)
            g.drawLine(100, 300-i*50, 500, 300-i*50);
            //menggambar garis horizontal per 50 pixel
            //(posisiX, posisiY, panjang, lebar)
        g.setColor(Color.blue); //mengatur warna
        g.drawRect(100, 75, 400, 275); //menggambar persegi panjang
        //(posisiX, posisiY, panjang, lebar)
        g.setColor(Color.black);
        int x0 = 100;
        g.drawString("Ini contoh gambar Grafik",150,375); //menggambar String
        //(String, posisiX, posisiY)
        for(int i=1; i<y.length; i++) 
            g.drawLine(x0+(i-1)*40, 350-y[i-1],x0+i*40,350- y[i]); 
    }
}

Bisakah grafik garis di atas dirubah menjadi grafik balok ?