import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class optionPaneSwing
    extends JFrame {

  // Main
  public static void main(String[] args) {
    optionPaneSwing op = new optionPaneSwing();
    op.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    op.pack();
    op.show();
  }

  // Kontruktor
  public optionPaneSwing() {
    super("OptionPane");
    // Mengatur Layout
    this.getContentPane().setLayout(new BoxLayout(this.getContentPane(),
                                                  BoxLayout.X_AXIS));
    // Membuat Komponen Panel
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    // Menambahkan Komponen pada Frame
    this.getContentPane().add(panel1);
    this.getContentPane().add(panel2);
    this.getContentPane().add(panel3);
    // Layout panel 2
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
    // Menambahkan Tombol pada Panel 2
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
    panel2.add(tombolWarningDialog());
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
    panel2.add(tombolInputDialog());
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
    panel2.add(tombolMessageDialog());
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
    panel2.add(tombolConfirmationDialog());
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
    panel2.add(tombolOptionDialog());
    panel2.add(Box.createRigidArea(new Dimension(1, 10)));
  } // Akhir methode optionPaneSwing

  /**
   * Methode tombolWarningDialog
   * Membuat dan Memproses tombol "Warning Dialog"
   * @return : buatTombol(a)
   */
  public JButton tombolWarningDialog() {
    Action a = new AbstractAction("Warning Dialog") {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "<html><p align=center><b><font size=6 color=#FF0000>WARNING</font></b></p><p align=left><font color=#FF0000 size=4>Perhatian !!!</font> Dilarang Menggunakan Software Bajakan.<br>Hargailah <b><font color=#0000FF>Hak Atas Kreatifitas Intelektual</font></b> ... </br><br>Untuk itu dianjurkan menggunakan Sofware yang <font color=#0000FF>Free</font> ... </br><br>Gunakanlah <b><font color=#00FF00>JAVA</font></b> !!! Selain Free, JAVA juga <b><i>OPEN SOURCE</i></b>.</br> <br>Kenapa Juga gunakan yang bajakan.....</br><br>Kalau ada yang gratis dan lebih baik dari yang bajakan.</br></p><p><br><i>Catatan : Text ini menggunakan format HTML</i></p></br></html>",
                                      "Ini Warning Dialog",
                                      JOptionPane.WARNING_MESSAGE);
      }
    };
    return buatTombol(a);
  }

  /**
   * Methode tombolInputDialog
   * Membuat dan Memproses tombol "Input Dialog"
   * @return : buatTombol(a)
   */
  public JButton tombolInputDialog() {
    Action a = new AbstractAction("Input Dialog") {
      public void actionPerformed(ActionEvent e) {
        String o = JOptionPane.showInputDialog(null, "Masukkan Nama Anda",
                                               "Input Dialog",
                                               JOptionPane.OK_CANCEL_OPTION);
        JOptionPane.showMessageDialog(null, "Nama Anda Adalah '" + o + "'");
      }
    };
    return buatTombol(a);
  }

  /**
   * Methode tombolMessageDialog
   * Membuat dan Memproses tombol "Message Dialog"
   * @return : buatTombol(a)
   */
  public JButton tombolMessageDialog() {
    Action a = new AbstractAction("Message Dialog") {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "Ini pesan Dialog JOptionPane");
      }
    };
    return buatTombol(a);
  }

  /**
   * Methode tombolConfirmationDialog
   * Membuat dan Memproses tombol "Confirmation Dialog"
   * @return : buatTombol(a)
   */
  public JButton tombolConfirmationDialog() {
    Action a = new AbstractAction("Confirmation Dialog") {
      public void actionPerformed(ActionEvent e) {
        int tanya = JOptionPane.showConfirmDialog(null,
            "Apakah Anda Menggunakan JAVA ???", "Pertanyaan",
            JOptionPane.YES_NO_OPTION);
        if (tanya == JOptionPane.YES_OPTION) {
          JOptionPane.showMessageDialog(null,
              "Anda Menekan YES, Memang menggunakan JAVA");
        }
        else {
          JOptionPane.showMessageDialog(null,
              "Kenapa Anda Menekan NO, Padahal Anda menggunakan JAVA");
        }
      }
    };
    return buatTombol(a);
  }

  /**
   * Methode tombolOptionDialog
   * Membuat dan Memproses tombol "Option Dialog"
   * @return : buatTombol(a)
   */
  public JButton tombolOptionDialog() {
    // Action dari Tombol
    Action a = new AbstractAction("Option Dialog") {
      // Methode untuk merespon dan memproses saat tombol ditekan
      public void actionPerformed(ActionEvent e) {
        // Membuat objek untuk mengganti nama tombol
        Object[] o = {
            "Ya", "Batal", "Tidak Tahu"};
        // Membuat objek untuk menampilkan Teks dan Choice pada OptionPane
        Object[] pilih = new Object[2];
        // Teks
        pilih[0] = "Editor Apa yang Anda Gunakan Untuk Java";
        // Choice
        Choice l = new Choice();
        l.addItem("JBuilder");
        l.addItem("Java Studio");
        l.addItem("Visual J");
        l.addItem("JCreator");
        pilih[1] = l;
        // Menampilkan Option Dialog
        int option = JOptionPane.showOptionDialog(null,
                                                  pilih, "Option",
                                                  JOptionPane.YES_NO_OPTION,
                                                  JOptionPane.QUESTION_MESSAGE, null,
                                                  o,
                                                  o[0]);
        // Mengambil item yang dipilih
        String item = l.getSelectedItem();
        switch (option) {
          case 0: // Ya
            JOptionPane.showMessageDialog(null,
                                          "Anda Memilih \"" + item +
                                          "\" sebagai Editor yang Anda Gunakan");
            break;
          case 1: // Batal
            JOptionPane.showMessageDialog(null, "Anda Batal Memilih Editor");
            break;
          case 2: // Tidak Tahu
            JOptionPane.showMessageDialog(null,
                "Anda Benar-Benar Tidak Tau Apa yang Anda Gunakan ???");
            break;

        }
      }
    };
    // Kembali ke buatTombol(a)
    return buatTombol(a);
  }

  /**
   * Methode buatTombol
   * Untuk membuat Tombol (Warna, ukuran, Action)
   * @param a : Action
   * @return : b (JButton)
   */
  public JButton buatTombol(Action a) {
    // Membuat tombol
    JButton b = new JButton() {
      // Methode untuk mengatur ukuran tombol
      public Dimension getMaximumSize() {
        int width = Short.MAX_VALUE;
        int height = super.getMaximumSize().height;
        return new Dimension(width, height);
      }
    };
    // Mengatur Action tombol
    b.setAction(a);
    // Mengatur Warna Tombol
    b.setBackground(Color.yellow);
    return b;
  }
}