Minggu, 09 September 2012

Menu Konversi Bilangan with JOptionPane (using JAVA)

Assalamualaikum.. :D InsyaAllah ini pembaharuan terakhir :D
Ketemu lagi deh.. hehe kesempatan kali ini saya akan menjabarkan tentang program konversi bilangan (lagi) dengan JAVA :D namun post ini berbeda dengan artikel sebelumnya. Perbedaannya di mana ? Perbedaannya yaitu pada tampilan menunya yang sekarang menggunakan JOptionPane, bukan console :D
Seperti Ini :D

Output Pertama, menyuruh kita menginputkan nama kita..


Kemudian, jika anda mendapat tampilan ini berarti anda belum mengisi nama namun telah mengklik 'OK'


Atau anda meng-cancel / mengklik tanda X di pojok kanan akan keluar alert seperti dibawah ini..


Namun jika anda telah benar menginputkan nama, anda akan mendapatkan window untuk menginputkan gender anda..


Anda harus memilih di antara 2 pilihan tersebut, dan apabila anda menekan 'X' di pojok kanan atas, maka anda akan mendapat alert ini.

Jika sudah berhasil, maka anda akan mendapat menu ini.


 Coba pilih salah satu menu, dan isikan '270996'


Output Untuk Menu BINER


 Output Untuk Menu Hexa


Output Untuk Menu Octal

 Output Untuk Menu TERBILANG


 Output Untuk Menu PECAHAN


 Pada saat kita menginputkan bilangan desimal, jika kita tidak menginputkan bilangan namun langsung memproses, maka akan keluar alert ini.


Begitu juga ketika kita menekan tanda X di pojok kanan window, akan keluar alert ini.


 Jika kita memilih menu KEMBALI, kita akan kembali pada saat kita diminta untuk menginputkan nama


 Dan kita akan keluar dari program ketika memilih menu EXIT, dan sebelumnya kita akan mendapatkan salam :D



Ya, itu tadi ScreenShot dari programnya.. namun, bagaimana Source Codenya ? Check it out !

Terett..


import javax.swing.JOptionPane;

public class MenuDariJOption {

    private static String name;
    private static String des;
    private static int validDes;
    private static String gender;
    static StringBuilder binerHasil = new StringBuilder();
    static StringBuilder hexaHasil = new StringBuilder();
    static StringBuilder octalHasil = new StringBuilder();
    static String cs;

    public static void keBiner(int n) {
        if (n > 1) {
            keBiner(n / 2);
        }
        binerHasil.append(n % 2);
    }

    public static void hexa(int n) {
        char[] daftarHexa = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
            '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        if (n > 0) {
            hexa(n / 16);
            hexaHasil.append(daftarHexa[n % 16]);
        }
    }

    public static void octal(int n) {
        char[] daftarOctal = {'0', '1', '2', '3', '4', '5', '6', '7'};
        if (n > 0) {
            octal(n / 8);
            octalHasil.append(daftarOctal[n % 8]);
        }
    }

    public static void inputDesJOption() {
        des = JOptionPane.showInputDialog("Masukkan "
                + "Bil.Desimalnya = ");
        try {
            if (des.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Harus diisi !");
                inputDesJOption();
            }
        } catch (NullPointerException nfe) {
            JOptionPane.showMessageDialog(null, "Inputkan Angka Terlebih dahulu !");
            inputDesJOption();
        }
    }

    public static void eksepsiInpBiner() {
        inputDesJOption();
        try {
            validDes = Integer.parseInt(des);
            keBiner(validDes);
            System.out.println("\n");
            JOptionPane.showMessageDialog(null, "Bilangan desimal : " + des + " "
                    + "jika dijadikan Biner hasilnya : " + binerHasil,
                    "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
            binerHasil = new StringBuilder();
        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, des
                    + " bukan Angka! "
                    + "\nMasukkan angka!");
            eksepsiInpBiner();
        }
    }

    public static void eksepsiInpHexa() {
        inputDesJOption();
        try {
            validDes = Integer.parseInt(des);
            hexa(validDes);
            System.out.println("\n");
            JOptionPane.showMessageDialog(null, "Bilangan desimal : " + des + " "
                    + "jika dijadikan Hexa hasilnya : " + hexaHasil,
                    "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
            hexaHasil = new StringBuilder();
        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, des
                    + " bukan Angka! "
                    + "\nMasukkan angka!");
            eksepsiInpHexa();
        }
    }

    public static void eksepsiInpOctal() {
        inputDesJOption();
        try {
            validDes = Integer.parseInt(des);
            octal(validDes);
            System.out.println("\n");
            JOptionPane.showMessageDialog(null, "Bilangan desimal : " + des + " "
                    + "jika dijadikan Octal hasilnya : " + octalHasil,
                    "HASIL KONVERSI", JOptionPane.PLAIN_MESSAGE);
            octalHasil = new StringBuilder();
        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, des
                    + " bukan Angka! "
                    + "\nMasukkan angka!");
            eksepsiInpOctal();
        }
    }
    //Terbilang
    String[] angka = {"", "Satu", "Dua", "Tiga",
        "Empat", "Lima", "Enam", "Tujuh", "Delapan",
        "Sembilan", "Sepuluh", "Sebelas"};

    private String ucap(int x) {
        String bilang = "";
        int y = x / 100;
        if (y > 0) {
            bilang = angka[y] + " Ratus ";
            if (y == 1) {
                bilang = "Seratus ";
            }
            x %= 100;
        }
        if (x < 12) {
            bilang += angka[x];
        } else {
            y = x / 10;
            x %= 10;
            if (y == 1) {
                bilang += angka[x] + " Belas";
            } else {
                bilang += angka[y] + " Puluh " + angka[x];
            }
        }
        return bilang;
    }

    private String terbilang(long x) {
        int y;
        String bilang = "";
        String[] satuan = {"", " Ribu ", " Juta ", " Milyar ",
            " Trilyun ", " Quadrilyun ", " Quintilyun "};
        if (x > Math.pow(10, 20)) {
            return "Bilangan terlalu besar";
        }
        for (int i = 6; i > 0; i--) {
            y = (int) (x / Math.pow(10, i * 3));
            if (y > 0) {
                if (y == 1 && i == 1) {
                    bilang += " Seribu ";
                } else {
                    bilang += ucap(y) + satuan[i];
                }
            }
            x %= Math.pow(10, i * 3);
        }
        bilang += ucap((int) x);
        return bilang;
    }

    public static void uraianPecahan() {
        int desimal;
        String str = JOptionPane.showInputDialog("Masukkan bilangan yang "
                + "akan anda pecah : ");
        try {
            if (str.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Harus Diisi!");
                uraianPecahan();
            } else {
                desimal = Integer.parseInt(str);
                int satu, dua, tiga, empat,
                        lima, enam, tujuh, delapan, sembilan, sepuluh, sebelas,
                        duabelas, tigabelas;
                satu = desimal / 100000;
                desimal %= 100000;

                dua = desimal / 50000;
                desimal %= 50000;

                tiga = desimal / 20000;
                desimal %= 20000;

                empat = desimal / 10000;
                desimal %= 10000;

                lima = desimal / 5000;
                desimal %= 5000;

                enam = desimal / 2000;
                desimal %= 2000;

                tujuh = desimal / 1000;
                desimal %= 1000;

                delapan = desimal / 500;
                desimal %= 500;

                sembilan = desimal / 200;
                desimal %= 200;

                sepuluh = desimal / 100;
                desimal %= 100;

                sebelas = desimal / 50;
                desimal %= 50;

                duabelas = desimal / 10;
                desimal %= 10;

                tigabelas = desimal / 1;
                desimal %= 1;

                JOptionPane.showMessageDialog(null,
                        "Terdapat seratus ribuan sebanyak = " + satu
                        + "\nTerdapat lima puluh ribuan sebanyak = " + dua
                        + "\nTerdapat dua puluh ribuan sebanyak = " + tiga
                        + "\nTerdapat sepuluh ribuan sebanyak = " + empat
                        + "\nTerdapat lima ribuan sebanyak = " + lima
                        + "\nTerdapat dua ribuan sebanyak = " + enam
                        + "\nTerdapat seribuan sebanyak = " + tujuh
                        + "\nTerdapat lima ratusan sebanyak = " + delapan
                        + "\nTerdapat dua ratusan sebanyak = " + sembilan
                        + "\nTerdapat seratusan sebanyak = " + sepuluh
                        + "\nTerdapat lima puluhan sebanyak = " + sebelas
                        + "\nTerdapat lima satuan sebanyak = " + duabelas
                        + "\nTerdapat satuan sebanyak = " + tigabelas, "PECAHAN",
                        JOptionPane.INFORMATION_MESSAGE);
            }
        }catch (NullPointerException not) {
            JOptionPane.showMessageDialog(null, "Inputkan Angka Terlebih Dahulu");
            uraianPecahan();
        } catch (NumberFormatException nae) {
            JOptionPane.showMessageDialog(null, str +" bukan angka"
                    + "\nMasukkan Angka");
            uraianPecahan();
        }
    }

    public static void outHasilBiner() {
        eksepsiInpBiner();
    }

    public static void outHasilHexa() {
        eksepsiInpHexa();
    }

    public static void outHasilOctal() {
        eksepsiInpOctal();
    }

   public static void outTerbilang() {
        cs = JOptionPane.showInputDialog("Masukan Bilangan yang akan disebut : ");
        try {
            if (cs.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Harus Diisi !");
                outTerbilang();
            } else {
                JOptionPane.showMessageDialog(null, cs + " Terbilang "
                        + new MenuDariJOption().terbilang(new Long(cs)),
                        "TERBILANG", JOptionPane.INFORMATION_MESSAGE);
            }
        } catch (NullPointerException not) {
            JOptionPane.showMessageDialog(null, "Inputkan Angka Terlebih Dahulu");
            outTerbilang();
        } catch (NumberFormatException nae) {
            JOptionPane.showMessageDialog(null, cs
                    + " bukan Angka! "
                    + "\nMasukkan angka!");
            outTerbilang();
        }
    }

    public static void inpNama() {
        name = JOptionPane.showInputDialog("Masukkan Nama : ");
        try {
            if (name.isEmpty()) {
                JOptionPane.showMessageDialog(null, "Nama Harus Diisi"
                        + " tidak boleh kosong !");
                inpNama();
            }
        } catch (NullPointerException nfe) {
            JOptionPane.showMessageDialog(null, "Harap diisi Nama Dulu!");
            inpNama();
        }
    }

    public static void inpGender() {
        String[] choices = {"Laki-Laki", "Perempuan"};
        int gnder = JOptionPane.showOptionDialog(
                null, "Jenis Kelamin ?" // Pesan
                , "Gender" // Judul di Tittlebar
                , JOptionPane.YES_NO_OPTION // Tipe Option
                , JOptionPane.PLAIN_MESSAGE // Tipe Pesan
                , null, choices, null);
        switch (gnder) {
            case 0:
                gender = "Abang ";
                break;
            case 1:
                gender = "Eneng ";
                break;
            default:
                JOptionPane.showMessageDialog(null,
                        "Mohon Pilih Jenis Kelamin Anda");
                inpGender();
                break;
        }
    }

    public static void backToMenu() {
        inpNama();
        inpGender();
    }

    public static void menuJOption() {
        inpNama();
        inpGender();
        String[] pilihan = {"BINER", "HEXA", "OKTAL", "TERBILANG", "PECAHAN",
            "KEMBALI", "EXIT"};
        while (true) {
            int response = JOptionPane.showOptionDialog(
                    null, // Tengah Window.
                    "Selamat Datang " + gender + name + " :)"
                    + "\nPilih Konversi Bilangan Di Bawah ini",
                    "Konversi Bilangan",
                    JOptionPane.YES_NO_OPTION, // tipe pilihan
                    JOptionPane.PLAIN_MESSAGE, // tipe pesan
                    null, // icon (none)
                    pilihan, //tombol text
                    null // label tombol default
                    );
            // menggunakan switch untuk mengecek tombol yang ditekan.
            switch (response) {
                case 0:
                    outHasilBiner();
                    break;
                case 1:
                    outHasilHexa();
                    break;
                case 2:
                    outHasilOctal();
                    break;
                case 3:
                    outTerbilang();
                    break;
                case 4:
                    uraianPecahan();
                    break;
                case 5:
                    backToMenu();
                    break;
                case 6:
                    JOptionPane.showMessageDialog(null, "Terimakasih "
                            + gender + name
                            + " Telah Mencoba Program Konversi Bilangan Ini"
                            + ", Sampai Jumpa :D");
                    System.exit(0);
                    break;
                case -1:
                    JOptionPane.showMessageDialog(null, "Terimakasih "
                            + gender + name
                            + " Telah Mencoba Program Konversi Bilangan Ini"
                            + ", Sampai Jumpa :D");
                    System.exit(0);
                default:
                    //... Jika ktia disini ada kesalahan,
                    JOptionPane.showMessageDialog(null,
                            "response salah " + response);
                    break;
            }
        }
    }
    public static void main(String[] args) {
        menuJOption();
    }
}

Yap, cukup panjang :D Happy Coding :D
Sekian, Terimakasih sudah menyimak :D Maaf Kalau ada kesalahan, Wassalamualaikum :)

1 komentar: