Fungsi-fungsi dasar membuat objek dengan openGL


Hai, lama tidak update karena kesibukan persiapan UAS. Kali ini saya akan menjelaskan beberapa fungsi dasar untuk membuat objek pada open GL. Disini saya asumsikan sudah mengenal apa itu open GL dan sudah bisa menggunakannya. Fungsi dasar ini sudah ada di library open GL, namun banyak yang tidak paham bagaimana cara menggunakannya. 

Sebelum masuk ke fungsi membuat objeknya, disini saya menggunakan satu fungsi main saja, yaitu :
int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Jendela open gl");
    glutDisplayFunc(display);
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    glutMainLoop();
    return 0;
}
Jadi untuk mengganti-ganti objeknya saya lakukan pada prosedur display. Berikut beberapa fungsinya :
1. Point / titik
    Saya rasa disini tidak perlu penjelasan mendalam karena tentu kita semua tau tentang titik. 
void display(void){
  glClear(GL_COLOR_BUFFER_BIT);
  glPointSize(5.0f); // mengatur besar titik
  glBegin(GL_POINTS);
    glColor3f(1.0f,0.0f,0.0f);
    glVertex3f(0.25,0.25,0.0); // 'titik' posisi titik yang ingin dibuat
  glEnd();
  glFlush();
}
    Nah untuk menampilkan titik tersebut, digunakan GL_POINTS dan dibawahnya kita menentukan koordinatnya.

2. Line / garis
    Untuk membuat garis, maka dibutuhkan dua vertex, diantara begin dan end digunakan 2 vertex. Pada bagian begin diisi dengan GL_LINES. Ketika dimasukkan tiga titik maka titik ketiga akan diabaikan.
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLineWidth(2.0f);
    glBegin(GL_LINES);
      glColor3f(1.0f,1.0f,1.0f);
      glVertex3f(0.0f,0.2f,0.0f);
      glVertex3f(0.0f,-0.2f,0.0f);
    glEnd();
    glFlush();
}
3. Line loop
    Line loop adalah garis yang menyambung ke titik paling awal. Jadi ketika kita punya tiga titik, bukan dua garis yang terbentuk melainkan tiga garis. Garis tambahan tersebut berasal dari garis yang ditarik dari titik terakhir ke titik awal. Pada bagian begin diisikan GL_LINE_LOOP.
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f,0.0f,0.0f);
    glBegin(GL_LINE_LOOP);
      glVertex3f(0.0f,0.0f,0.0f);
      glVertex3f(0.5f,0.5f,0.0f);
      glVertex3f(0.7f,0.0f,0.0f);
    glEnd();
    glFlush();
}
4. Line Strip
    Jika titik terakhir membuat garis ke titik awal pada line loop, hal itu tidak ada pada line strip. Jika ada tiga titik maka akan terbentuk 2 garis saja. Titik pertama akan membuat garis dengan titik kedua, titik kedua membentuk garis dengan titik ketiga, dan begitu terus sampai titik terakhir yang ditentukan. Disini GL_LINE_STRIP digunakan pada glBegin
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f,0.0f,0.0f);
    glBegin(GL_LINE_STRIP);
      glVertex3f(0.0f,0.0f,0.0f);
      glVertex3f(0.5f,0.5f,0.0f);
      glVertex3f(0.5f,0.0f,0.0f);
    glEnd();
    glFlush();
}
5. Triangle
    Untuk membuat sebuah segitiga,  dibutuhkan tiga titik saja. Jadi diantara begin dan end akan ada tiga titik, jika ada empat maka titik keempat diabaikan. Digunakan GL_TRIANGLES pada pembuatan segitiga
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glColor3f(1.0f,0.0f,0.0f);glVertex3f(-0.1f,-0.1f,0.0f);
    glColor3f(0.0f,1.0f,0.0f);glVertex3f(0.0f,-0.1f,0.0f);
    glColor3f(.0f,0.0f,1.0f);glVertex3f(0.0f,0.1f,0.0f);
    glEnd();
    glFlush();
}
6. Triangle Fan
    Triangle fan sesuai namanya dibayangkan seperti kipas. Tiga titik akan membentuk sebuah segitiga, titik keempat akan membentuk segitiga dari titik ketiga dan titik paling awal. Untuk contohnya bisa dengan mencoba source code dibawah.
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLE_FAN);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex3f(0.00, 0.0, 0.0);
    glVertex3f(0.00, 0.50, 0.0);
    glColor3f(0.0f, 1.0f, 1.0f);
    glVertex3f(0.7, 0.7, 0.0);
    glVertex3f(0.50, 0.00, 0.0);
    glEnd();
    glFlush();
}
7. Triangle Strip
    Dengan adanya kata strip, maka pembuatan segitiga dilakukan berlanjut.  Maksudnya berlanjut yaitu, misal terdapat empat titik, tiga titik akan membentuk segitiga, titik terakhir akan membentu segitiga dengan menggunakan dua titik sebelumnya, yaitu titik kedua dan ketiga. Jika ada titik baru, maka akan dibentuk segitiga dengan dua titik sebelumnya.
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLE_STRIP);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex3f(0.00, 0.0, 0.0);
    glVertex3f(0.00, 0.50, 0.0);
    glColor3f(0.0f, 1.0f, 1.0f);
    glVertex3f(0.7, 0.7, 0.0);
    glColor3f(0.0f, 0.0f, 0.0f);
    glVertex3f(0.50, 0.00, 0.0);
    glEnd();
    glFlush();
}
8. Quads
    Quad adalah segiempat, maka dibutuhkan empat titik saja. maka diantara begin dan end harus ada empat titik agar objek ini muncul. Contohnya bisa dilihat ketika menggunakan source code dibawah :
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUADS);
    glColor3f(0.7f,0.7f,0.0f);
    glVertex3f(-0.7f,0.7f,0.0f);
    glVertex3f(0.7f,0.7f,0.0f);
    glVertex3f(0.7f,0.0f,0.0f);
    glVertex3f(0.0f,0.3f,0.0f);
    glEnd();
    glFlush();
}
9. Quad Trip
    Berbeda dengan Quads yang mengabaikan titik kelima dan keenam, Quad Trip akan membuat bidang baru dengan menggunakan dua titik sebelumnya. Jika hanya memasukkan lima titik, maka bidang kedua tidak akan muncul. Pada glBegin diisikan GL_QUAD_STRIP.
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUAD_STRIP);
    glColor3f(1.0f,0.0f,0.0f);
    glVertex3f(0.0f,0.0f,0.0f);
    glVertex3f(-0.7f,0.7f,0.0f);
    glVertex3f(0.7f,0.7f,0.0f);
    glVertex3f(0.0f,0.8f,0.0f);
    glColor3f(1.0f,1.0f,0.0f);
    glVertex3f(0.8f,0.0f,0.0f);   
    glVertex3f(0.5f,0.0f,0.0f);       
    glEnd();
    glFlush();
}
Nah itu dia beberapa fungsi dasar untuk membuat suatu objek, masih banyak fungsi yang lain seperty polygon,dll. Hal itu bisa dijelajahi dengan membuka situs openGL. Source code diatas hanya sebagai contoh, nilai yang terdapat pada glVertex dan glColor bisa diganti untuk mendapatkan hasil yang berbeda. Semoga bermanfaat, terimakasih.

Web design dan User Experience


Berbagai macam design web dan UX dapat kita temukan. Web design dan UX itu penting, pernahkan ketika kita membuka suatu website, kita tertarik membaca tulisan yang ada pada website tersebut meskipun tulisannya sedikit ?. Disitulah web design dan UX design digunakan, yaitu agar ketika orang membuka websitenya, mereka akan tertarik untuk membaca isi yang ada pada website tersebut.  Pada artikel kali ini penulis mencoba memberikan tips-tips pada design web dan UX. Tulisan ini bersumber dari pengalaman penulis sendiri selama mencoba pemrograman web.
1. Gambar sesuai ukuran layar
Ketika membuka suatu website dan kita disuguhi suatu gambar dengan resolusi tinggi dan ukuran sesuai ukuran layar browser seringkali gambar tersebut membuat kita terhenti dan fokus kepada gambar tersebut. Nah dari situ bisa diambil kesimpulan bahwa penggunaan gambar resolusi tinggi dan ukuran sesuai ukuran layar alias full akan memberi pengalaman yang baik untuk pengunjung website.

2. Mengarahkan user ke halaman yang tepat
Misalnya untuk website yang menawarkan suatu produk fashion, begitu user membuka halaman utama website dan melakukan scroll kebawah, berikan pilihan untuk mereka. Seperti fashion untuk cewek atau cowok. Tentu halaman yang mereka tuju berbeda tampilannya. Hal ini akan memberi pengalaman kepada user dimana mereka bisa "berpetualang" di website tersebut, rasa penasaran akan muncul dan tentu trafic yang tinggi untuk website tersebut.

3. Gunakan warna yang kontras
Dengan menggunakan warna yang kontras, tentu user mengerti elemen yang ada pada website. User tau mana yang tombol atau link, mana yang tulisan biasa. Carilah referensi warna yang cocok untuk website anda. Untuk kode warna bisa dilihat pada website w3schools.

4. Berikan navigasi yang menarik
Bagaimana memberikan navigasi yang menarik ?. Hal ini bisa dilakukan dengan memberikan style yang berbeda dengan tombol lain. Buatlah tombol yang bisa membuat user berpikir untuk menekannya. Misal suatu website memiliki deretan menu dan ada satu menu yang diberi warna background yang berbeda dan menggunakan kata-kata yang membuat user penasaran.

5. Menggunakan video pada website
Tips ini cocok untuk website yang menjual produk, dimana dibutuhkan kepercayaan dari pengunjung untuk melakukan transaksi. Disinilah video tersebut membangun kepercayaan untuk user agar melakukan transaksi.

6. Sticky menu / navigasi
Selalu tampilkan di layar tombol yang memudahkan user untuk bergabung kedalam website. Tombol tersebut dibuat dengan menggunakan kata-kata yang mempengaruhi user agar mereka bisa menikmati fitur lengkap yang ada pada browser.

7. Gunakan penggolongan yang tepat
Mungkin anda pernah membuka pinterest ? Pada situs tersebut, mereka menggunakan tampilan kartu untuk menampilkan konten websitenya. Hal ini menarik karena susunan kartu tidak beraturan namun memiliki jarak yang sama antar kartu. Hal ini memberikan pengalaman tersendiri untuk user.

Nah itu 7 tips untuk web design dan UX design yang menurut penulis bermanfaat untuk dicoba. Hal-hal diatas juga penulis dapatkan ketika mencari ide untuk mendesain suatu website. Semoga bermanfaat, terimakasih.

Bahasa pemrograman dan semicolon


Dalam pemrograman, setiap akhir dari suatu perintah atau syntax, pasti diakhiri dengan titik koma ( ;). Memang tidak semua bahasa pemrograman menggunakan hal tersebut. Ketika mulai belajar pemrograman, titik koma atau semicolon akan ditemukan. Akan tetapi, ketika ada pertanyaan, kenapa diakhiri dengan titik komat atau semicolon ??

Nah jawaban yang didengar kadang beragam. Ada yang menjawab, "Hmm, ya itu karena bahasa pemrogramannya" atau "Memang seperti itu aturannya". Jawaban ini bisa dianggap benar, namun kurang tepat.

Dahulu, ketika bahasa pemrograman dikembangkan. Diperlukan suatu tanda untuk mengakhiri suatu statement atau pernyataan. Jadi kita bisa memasukkan pernyataan yang sangat panjang, sehingga menggunakan banyak baris dan jangan lupa dikakhiri dengan seicolon. Dahulu ketika harga memori sangatlah mahal dan pemprosesannya juga lama, maka program dibagi menjadi statement atau pernyataan terpisah. Maka digunakan suatu tanda untuk menandakan akhir dari statement itu. Setelah dicoba beberapa tanda, hal ini memunculkan kontradiksi dengan bahasa manusia. Contoh jika menggunakan koma ( , ) programmer bisa saja bingung antara bahasa pemrograman dan bahasa yang ia gunakan sehari-hari. Jika menggunakan titik ( . ) juga muncul kontradiksi karena seperti yang kita tau, tipe data real menggunakan titik walaupun dalam kesehariannya kita menggunakan koma untuk bilangan real atau desimal.

Maka diputuskan untuk menggunakan tanda semicolon atau titik koma. 

sumber : stackoverflow

Tag HTML yang umum digunakan dalam membuat suatu website


Hai, pada artikel kali ini saya akan membahas tentang HTML. Analogi membuat website adalah seperti membangun rumah, tentu pertama kali membuat pondasi rumah, kemudian lantai, dinding, dan sebagainya. Ketika sudah berbentuk rumah, si pemilik bisa mengecat dan menghias rumahnya sesuai keinginannya sendiri. Nah apa hubungannya dengan membuat suatu web ? HTML adalah pondasi suatu website, sedangkan untuk menghiasnya menggunakan CSS. 

Tag HTML cukup banyak dan akan memakan waktu untuk mempelajarinya satu persatu, akan lebih baik mempelajari tag yang penting saja terlebih dahulu. Nah dalam artikel ini difokuskan dalam pembuatan layout suatu website, untuk tampilan layout adalah layout yang pada umumnya ada pada web-web yang sering kita lihat.

Yang pertama adalah <HTML>, dibaca tag HTML, tag ini digunakan untuk membungkus semua elemen yang kita buat. Didalam tag tadi dibagi jadi dua bagian yang pertama bagian kepala dan yang kedua bagian badan, tidak akan sulit mengingatnya pasti. Yaitu <head> dan <body> lah dua bagian tadi.

<head> adalah tempat untuk menjelaskan apa saja yang ada pada body seperti warna elemen pada body apa saja. Kita simpan itu untuk artikel selanjutnya. Pada bagian body biasanya terdiri atas <header>, <nav>, <main>, <sidebar>, dan <footer>. Pada tag header biasanya tempat untuk judul website, tag nav untuk menu-menu website, main untuk isi website itu sendiri, sidebar adalah tempat widget-widget yang bisa difungsikan untuk website, dan footer adalah bagian bawah website yang biasanya berisi tulisan copyright. Berikut gambaran layout yang umunya digunakan.


Nah, selanjutnya beberapa tag yang digunakan di dalam tiap bagian tersebut :
<h1> : tag ini adalah untuk penulisan judul, angka tersebut bisa diganti dengan angka dari 1-6.
<p> : tag p (paragraph). Tentu mudah sekali untuk mengingat fungsinya.
<a> : tag ini digunakan untuk membuat link yang bisa mengarahkan ke luar atau ke dalam website.
<div> : tag ini tidak memiliki maksud apa-apa, hanya untuk membungkus. Tag ini sangat bermanfaat ketika kita sudah menggunakan CSS.

Cukup itu dulu tag yang saya jelaskan meskipun banyak tag lainnya. Tapi secara umum itulah yang terlihat ketika kita melihat suatu website. Semoga bermanfaat terimakasih.

Project java part 3 (final)


Hai, cukup memakan waktu untuk project ini selesai di-finalkan. Hal ini juga dipengaruhi berbagai faktor untuk menulis artikel. Sebelum melanjutkan ke bawah, pastikan kalian sudah membaca part 1 dan part 2. Karena tanpa kedua part sebelumnya tadi maka project tidak akan selesai. Nah langsung saja, buatlah class baru dalam package yang sama dengan class StructTree dan beri nama Tree. Nama yang digunakan haruslah Tree karena kode dibawah ditulis dalam kelas Tree. Setelah membuat class baru tersebut, silahkan copy kode dibawah kedalam class Tree.
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.Color;
import java.awt.Cursor;

import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.UIManager;


public class Tree {

    private JFrame frame;
    private JTextArea tampil;
    private JTextField number;
    private JTextField level;
    private JTextField daun;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Tree window = new Tree();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Tree() {
        initialize();
    }
    /**
     * Initialize the contents of the frame.
     */
       
    private void initialize() {
        frame = new JFrame("Binary Tree");
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        frame.setResizable(false);
       
        StructTree mytree = new StructTree();
       
        JButton btnInsert = new JButton("Insert");
        btnInsert.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        btnInsert.setForeground(Color.BLACK);
        btnInsert.setBackground(SystemColor.controlHighlight);
        btnInsert.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 12));
        btnInsert.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                int tambah;
                try{
                    tambah = Integer.parseInt(number.getText());
                    if(mytree.level(mytree.root)-1<5){
                        if(mytree.find(tambah)==null){
                            mytree.insert(tambah);
                        }
                        else{
                            JOptionPane.showMessageDialog(null, "Angka sudah dimasukkan");
                        }
                    }
                    else{
                        JOptionPane.showMessageDialog(null, "Level maksimum 5");
                    }
                   
                    // Create a stream to hold the output
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    PrintStream ps = new PrintStream(baos);
                    // IMPORTANT: Save the old System.out!
                    PrintStream old = System.out;
                    // Tell Java to use your special stream
                    System.setOut(ps);
                    // Print some output: goes to your special stream
                    mytree.print();
                    // Put things back
                    System.out.flush();
                    System.setOut(old);
                    // Show what happened
                    String tree = baos.toString();
                   
                    tampil.setText(tree);
                    level.setText(Integer.toString(mytree.level(mytree.root)-1));
                    daun.setText(Integer.toString(mytree.nbDaun(mytree.root)));
                   
                } catch(Exception e){
                    JOptionPane.showMessageDialog(null, "Input tidak valid");
                    number.setText("");
                }
            }
        });
        btnInsert.setBounds(307, 59, 117, 37);
        frame.getContentPane().add(btnInsert);
       
        JButton btnDelete = new JButton("Delete");
        btnDelete.setForeground(Color.BLACK);
        btnDelete.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        btnDelete.setBackground(SystemColor.controlHighlight);
        btnDelete.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 12));
        btnDelete.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg1) {
                int kurang;
                try{
                    kurang = Integer.parseInt(number.getText());
                   
                    if(mytree.level(mytree.root)-1>0){
                        if(mytree.find(kurang)!=null){
                            mytree.hapus(mytree.root,kurang);
                        }
                        else{
                            JOptionPane.showMessageDialog(null, kurang+" Tidak ada di dalam tree");
                        }
                    }
                    else{
                        JOptionPane.showMessageDialog(null, "Tidak bisa menghapus node akar");
                        number.setText("");
                    }
                   
                    // Create a stream to hold the output
                    ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
                    PrintStream ps2 = new PrintStream(baos2);
                    // IMPORTANT: Save the old System.out!
                    PrintStream old2 = System.out;
                    // Tell Java to use your special stream
                    System.setOut(ps2);
                    // Print some output: goes to your special stream
                    mytree.print();
                    // Put things back
                    System.out.flush();
                    System.setOut(old2);
                    // Show what happened
                    String tree = baos2.toString();
                   
                    tampil.setText(tree);
                    level.setText(Integer.toString(mytree.level(mytree.root)-1));
                    daun.setText(Integer.toString(mytree.nbDaun(mytree.root)));
                   
                } catch(Exception e1){
                    JOptionPane.showMessageDialog(null, "Input tidak valid");
                    number.setText("");
                }
            }
        });
        btnDelete.setBounds(307, 107, 117, 37);
        frame.getContentPane().add(btnDelete);
       
        JButton btnSearch = new JButton("Search");
        btnSearch.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg2) {
                int cari;
                try{
                    cari = Integer.parseInt(number.getText());
                    if(mytree.find(cari)!=null){
                        JOptionPane.showMessageDialog(null, cari+" Ada di dalam tree");
                    }
                    else{
                        JOptionPane.showMessageDialog(null, cari+" Tidak ada di dalam tree");
                    }
                } catch(Exception e2){
                    JOptionPane.showMessageDialog(null, "Input tidak valid");
                    number.setText("");
                }
            }
        });
        btnSearch.setForeground(Color.BLACK);
        btnSearch.setBackground(SystemColor.controlHighlight);
        btnSearch.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        btnSearch.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 12));
        btnSearch.setBounds(307, 155, 117, 37);
        frame.getContentPane().add(btnSearch);
       
        tampil = new JTextArea();
        tampil.setBackground(Color.WHITE);
        tampil.setDisabledTextColor(Color.WHITE);
        tampil.setEditable(false);
        tampil.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 11));
        tampil.setBounds(10, 11, 287, 203);
        frame.getContentPane().add(tampil);
        tampil.setColumns(10);
        tampil.setLineWrap(true);
       
        number = new JTextField();
        number.setHorizontalAlignment(SwingConstants.CENTER);
        number.setBackground(SystemColor.text);
        number.setForeground(Color.BLACK);
        number.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 12));
        number.setBounds(307, 11, 117, 37);
        frame.getContentPane().add(number);
        number.setColumns(10);
       
        JButton btnClose = new JButton("Close");
        btnClose.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg3) {
                String ObjButtons[] = {"Yes","No"};
                int pilihan = JOptionPane.showOptionDialog(null,"Apakah Anda Yakin Ingin keluar ?","Message",JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE,null,ObjButtons,ObjButtons[1]);
                if(pilihan == 0){
                    JOptionPane.showMessageDialog(null,"Credit :\nMUHAMMAD JUNDANA AB  - 24010314130069\nGALIH DEA PRATAMA           - 24010314130080\nHAFIDH AULIA WIRANDI       - 24010314130095\nMUHAMMAD WAGE JULI S - 24010314130114 ");
                    System.exit(0);
                }
            }
        });
        btnClose.setForeground(Color.BLACK);
        btnClose.setBackground(SystemColor.controlHighlight);
        btnClose.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        btnClose.setFont(new Font("MS Reference Sans Serif", Font.PLAIN, 12));
        btnClose.setBounds(307, 212, 117, 37);
        frame.getContentPane().add(btnClose);
       
        JLabel lblLevel = new JLabel("Level                :");
        lblLevel.setBounds(10, 225, 86, 14);
        frame.getContentPane().add(lblLevel);
       
        level = new JTextField();
        level.setBorder(null);
        level.setBackground(UIManager.getColor("Button.background"));
        level.setBounds(100, 222, 22, 20);
        frame.getContentPane().add(level);
        level.setColumns(10);
       
        JLabel lblDaun = new JLabel("Jumlah daun :");
        lblDaun.setBounds(10, 245, 86, 14);
        frame.getContentPane().add(lblDaun);
       
        daun = new JTextField();
        daun.setBorder(null);
        daun.setBackground(UIManager.getColor("Button.background"));
        daun.setBounds(100, 242, 22, 20);
        frame.getContentPane().add(daun);
        daun.setColumns(10);
    }
}

Setelah kode diatas di copy, silahkan di compile dan lihat hasilnya. Yap sebuah program desktop berhasil kalian buat.


Jika ingin mencoba programnya saja, bisa download disini : tree
Cek terus project-project yang akan saya buat. Terimaksih semoga bermanfaat.

Project java part 2


Setelah kita mempersiapkan apa yang perlu di persiapkan pada Project java part 1. Kali ini masuk ke kodingan dari project yang akan dibuat. Postingan kali ini penulis share kodenya meskipun ada warning yang didapat namun tidak berpengaruh terhadap hasil dari project. Kode dibawah adalah kode  untuk struktur data tree, namun belum untuk tampilan desktop karena kode untuk struktur tree cukup panjang. Pada kode juga terdapat dokumentasi yang bisa membantu untuk memahami kode ini. Garis besarnya struktur tree bisa melakukan insert, search dan delete, sedangkan lainnya hanya tambahan untuk informasi pada tree.

Nah, bagaimana menggunakan kode dibawah ? Cukup simpel lho !. Buatlah file project pada IDE eclipse atau Klik File > new > Java Project, akan muncul suatu jendela, cukup isikan nama project dan klik finish. Akan muncul file project yang dibuat tadi di tab kiri eclipse. Buka file project tersebut, pada folder src klik kanan > new > package dan klik finish setelah memasukkan nama package pada jendela yang muncul. Selanjutnya adalah membuat class, klik kanan pada package yang dibuat tadi pilih new dan pilih class, perlu diperhatikan disini nama class yang dimasukka haruslah StructTree ,berbeda dengan pemberian nama project dan nama package, untuk menggunakan kode dibawah haruslah menggunakan nama class yang ada pada kode. Klik finish dan paste kode dibawah kedalam class yang baru saja dibuat. Nah class StructTree siap untuk digunakan, selanjutnya adalah membuat interface dari project tersebut yang akan dijelaskan pada postingan berikutnya.
import java.util.*;

class Node{
    int data;
    Node left;
    Node right;
    Node(int x){
        this.data = x;
    }
}

class StructTree{
    Node root;

    /**
     * Mengecek apakah tree masih kosong
     **/
    boolean isEmpty(){
        return (root == null);
    }
   
    boolean isHaveChild(Node localRoot){
        if(localRoot.left!=null || localRoot.right!=null){
            return true;
        }
        else{
            return false;
        }
    }
    /**
     * Memasukkan suatu nilai ke dalam tree.
     * Jika nilai tersebut lebih kecil dari nilai node, maka bergerak ke kiri terus
     * hingga menjadi child, begitu juga sebaliknya.
     **/
    void insert(int input){
        Node temp = new Node(input);
        if (isEmpty())
            root = temp;
        else {
            Node cursor = root,
                 parent = null;
            while (cursor != null){
                parent = cursor;
                if (input < cursor.data)
                    cursor = cursor.left;
                else
                    cursor = cursor.right;
            }
            /**
             * Menambahkan Node baru pada kiri/kanan Node parent bergantung
             * pada nilai input dan nilai yang disimpan Node parent
             */
            if (input < parent.data){
                parent.left = temp;
                return;
            }
            else {
                parent.right = temp;
                return;
            }
        }
    }
    /**
     * Mencari suatu nilai dalam tree berdasarkan prinsip :
     * Selama belum menemukan nilai yang sama,
     * Jika nilai yang dicari lebih kecil dari nilai yang disimpan dalam Node
     * maka bergerak ke left Child begitu juga sebaliknya.
     **/
    Node find(int key){
        Node cursor = root;
        while (cursor != null){
            if (cursor.data == key)
                return cursor;
            else if (key < cursor.data)
                cursor = cursor.left;
            else
                cursor = cursor.right;
        }
        return null;
    }
   
    Node minValue(Node localRoot) {
        if (localRoot.left == null)
              return localRoot;
        else
              return minValue(localRoot.left);
    }
    Node maxValue(Node localRoot) {
        if (localRoot.right == null)
              return localRoot;
        else
              return maxValue(localRoot.right);
    }
   
    boolean isLeftChild = true;
   
    boolean hapus(Node localRoot, int key){
        Node current = localRoot;
        Node parent = localRoot;
       
        while (current.data != key) {
            parent = current;
            if (key < current.data) {
                isLeftChild = true;
                current = current.left;
            } else {
                isLeftChild = false;
                current = current.right;
            }
            if (current == null) {
                return false;
            }
        }
        if(current.data == key){
            if(current.left != null){
                int x = current.data =  maxValue(current.left).data;
                hapus(current.left,x);
            }
            else if(current.right != null){
                int x = current.data = minValue(current.right).data;
                hapus(current.right,x);
            }
            else if(current.left==null && current.right==null){
                if(parent != current){
                    if(isLeftChild){
                        parent.left = null;
                    }
                    else{
                        parent.right = null;
                    }
                }
                else{
                    if(isLeftChild){
                        Node s = find(current.data);
                        if(s.left != null){
                            find(maxValue(s.left).data).left = null;
                        }
                        else{
                            find(minValue(s.right).data).right = null;
                        }
                    }
                    else{
                        Node s = find(current.data);
                        if(s.left != null){
                            find(maxValue(s.left).data).left = null;
                        }
                        else{
                            find(minValue(s.right).data).right = null;
                        }
                    }
                }
            }
            return true;
        }
        else{
            return false;
        }
    }
   
    Node getParent(Node localRoot,int x){
        Node current = localRoot;
        Node parent = localRoot;
        while (current != null){
            if (current.data == x)
                return parent;
            else if (x < current.data){
                current = current.left;
            }
            else{
                parent = current;
                current = current.right;
            }
        }
        return null;
    }
   
    int nbDaun(Node localRoot){
        Node current = localRoot;
        if(current == null){
            return 0;
        }
        else{
            if((current.left==null) && (current.right==null)){
                return 1;
            }
            else{
                return nbDaun(current.left) + nbDaun(current.right);
            }
        }
    } 
   
    int level(Node localRoot){
        int u,v;
       
        if (localRoot == null){
            return 0;
        }
        u = level(localRoot.left);
        v = level(localRoot.right);
        if (u > v)
                return u+1;
        else return v+1;
    }
   
    void print() {
        Stack s = new Stack();
        s.push(root);
        int nBlanks = 32;
        boolean isRowEmpty = false;
        while (isRowEmpty == false) {
            Stack localStack = new Stack();
            isRowEmpty = true;
            for (int j = 0; j < nBlanks; j++) {
                System.out.print(' ');
            }
            while (!s.isEmpty()) {
                Node temp = (Node) s.pop();
                if (temp != null) {
                    System.out.print(temp.data);
                    localStack.push(temp.left);
                    localStack.push(temp.right);
                    if (temp.left != null || temp.right != null) {
                        isRowEmpty = false;
                    }
                } else {
                    System.out.print("  ");
                    localStack.push(null);
                    localStack.push(null);
                }
                for (int j = 0; j < nBlanks * 2 - 2; j++) {
                    System.out.print(' ');
                }
            }
            System.out.println();
            nBlanks /= 2;
            while (!localStack.isEmpty()) {
                s.push(localStack.pop());
            }
        }
    }
}

Perbedaaan tipe file gambar JPEG, PNG dan GIF

 

Tentu kita sudah tidak asing lagi dengan judul artikel kali ini. Kita sering menemukan file gambar dengan ekstensi .jpeg, .png, atau .gif. Jika sering membuat suatu desain dengan aplikasi pengolah gambar tentu pernah menyimpan hasil desainnya dengan menggunakan format tadi. Sekilas tipe file gambar tadi tidak terlalu berpengaruh terhadap pc kita. Namun dibalik itu semua, sebenernya terdapat perbedaan besar antara tipe-tipe itu. Untuk tiap tipe file, sebenarnya ada waktu yang tepat untuk menggunakannya, seperti file png yang cocok untuk web page. Nah, berikut perbedaan antara tipe file jpeg, png, dan gif.

1. JPEG

Tipe file gambar jpeg atau kadang kita temukan jpg ditemukan pada tahun 1986. JPEG (baca:jay-peg) merupakan singkatan dari "Joint Photographic Experts Group". Format ini dapat menampilkan jutaan warna dan menggunakan algoritma yang kompleks untuk mengkompresnya. JPEG populer digunakan sebagai file standar hasil pemotretan dari kamera digital, kebanyakan kamera menggunakan tipe file ini ketika menyimpan hasil pemotretan. Kompatibel untuk kebanyakan platform seperti pc, mac dan beberapa program seperti browser dan image editor. Bahkan pada tahun 2014 web browser Mozilla membuat mozjpeg format untuk browsernya. File jpeg bisa dicompress sehingga ukuran file lebih kecil tanpa kehilangan kualitas gambarnya.

2.GIF

GIF merupakan singkatan dari "Graphic Interchange Format", awalnya GIF dibuat agar pengiriman file gambar lebih cepat untuk koneksi yang lambat. Tipe ini menggunakan 256 indeks warna dengan menggunakan proses dithering sehingga 2 piksel warna dikombinasikan menghasilkan warna baru. Seperti yang biasa kita temukan, format gif berupa gambar yang bergerak atau bisa dianimasikan. Karena indeks warna yang digunakan lebih sedikit, maka file nya memiliki ukuran yang lebih kecil daripada jpeg dan ketika ketika dikompres pun tidak terjadi kehilangan data.

3.PNG

PNG muncul pada pertengahan 1990-an dengan menggunakan keuntungan-keuntungan yang ada pada file jpeg dan gif. Jadi ketika dilakukan pengompresan pada file tidak terjadi kehilangan data. PNG adalah singkatan dari "Portable  Network Graphics". File ini terbagi dua tipe, yang pertama PNG-8 dimana tipe ini mirip dengan GIF, menggunakan 256 indeks warna namun ukuran filenya lebih kecil daripada GIF. Kedua yaitu PNG-24 yang mirip dengan JPEG, menggunakan lebih dari 16 juta warna namun file yang dihasilkan lebih besar daripada jpeg. File ini bisa diatur agar transparan, transparan secara penuh atau sebagian.

Nah itu dia sekilas tentang perbedaan antara jpeg, gif dan png. Berikut adalah tabel agar kita tau kapan waktu yang pas untuk menggunakan tipe file tadi

Tipe File Waktu penggunaan
JPEG
  • Ketika file hanya tetap sebagai gambar
  • Untuk fotografi
  • Gambar menggunakan banyak warna
  • Gambar mengutamakan shading
GIF
  • Untuk animasi
PNG
  • Untuk gambar pada web seperti logo
  • Untuk pengeditan gambar
  • Untuk fotografi dengan mengutamakan warna dan ukuran file tidak menjadi masalah

Silahkan berkomentar dibawah jika ingin berkomentar :)

Most Popular