Banner Java

Multiple Document Interface (MDI) Di Pemrograman Java

Multiple Document Interface.

Banyak program aplikasi yang ada saat ini merupakan aplikasi yang dapat membuka lebih dari satu jendela kerja (multiple window) atau lebih dikenal dengan MDI (Multiple Document Interface). Kebalikan dari MDI adalah SDI (Single Document Interface). Multiple document interface memang cukup populer dan digunakan di banyak program aplikasi windows. Dengan Java, Anda dapat pula membuat program aplikasi semacam ini. Java menyediakan beberapa kelas untuk maksud tersebut yaitu kelas JDesktopPane dan kelas JInternalFrame.

Kelas JDesktopPane.

JDesktopPane adalah kelas wadah (container class) untuk membuat MDI. Di dalam membuat MDI, Anda tetap menggunakan kelas JFrame atau JApplet sebagai jendela luar (outer window), kemudian menambahkan obyek dari kelas JDesktopPane ke content pane dari kelas JFrame atau JApplet dan selanjutnya menambahkan obyek dari kelas JInternalFrame ke obyek JDesktopPane. JDesktopPane sendiri tidak mendukung border dan selalu ditambahkan dan diletakkan di pusat dari content pane kelas JFrame atau JApplet. Kelas JDesktopPane mempunyai sebuah konstruktor. Di bawah ini adalah konstruktor kelas JDesktopPane untuk mengkonstruksi obyek desktop pane.

   // Mengkonstruksi obyek desktop pane
   JDesktopPane()

Kelas JInternalFrame.

Kelas JInternalFrame merupakan kelas turunan dari kelas JComponent. JInternalFrame digunakan untuk membuat jendela (window) di dalam jendela yang lain. JInternalFrame mempunyai banyak fitur (features) sebagaimana umumnya frame di perangkat lunak aplikasi window saat ini seperti dragging, closing, resizing, menjadi icon, menampilkan title dan mendukung menu bar. Anda dapat menggunakan kelas JInternalFrame dengan cara yang hampir sama dengan kelas JFrame. Misalnya, untuk menambahkan komponen di conten pane dari kelas JInternalFrame, Anda dapat menggunakan metoda add, sedangkan untuk menentukan ukuran frame dari obyek internal frame, Anda dapat menggunakan metoda setSize.

Kelas JFrame bertindak sebagai komponen window level atas, sedangkan kelas JInternalFrame harus ditambahkan obyek kelas JDesktopPane yang ada di kelas JFrame atau JApplet. Anda dapat menampilkan obyek internal frame yang ada di obyek JDesktopPane menggunakan metoda setVisible. Berikut ini adalah konstruktor kelas JInternalFrame yang digunakan untuk mengkonstruksi obyek internal frame:

Konstruktor Kelas JInternalFrame
Konstruktor Keterangan
JInternalFrame() Mengkonstruksi obyek internal frame yang menonaktifkan resizable, maximisable, iconifiable dari frame tanpa adanya title.
JInternalFrame(String title) Mengkonstruksi obyek internal frame yang menonaktifkan resizable, maximisable, iconifiable dari frame dengan title tertentu.
JInternalFrame(String title, boolean resizable) Mengkonstruksi obyek internal frame yang mengaktifkan resizable dan menonaktifkan maximisable, iconifiable dari frame dengan title tertentu.
JInternalFrame(String title, boolean resizable, boolean closable) Mengkonstruksi obyek internal frame yang mengaktifkan resizable dan closable serta menonaktifkan maximisable, iconifiable dari frame dengan title tertentu.
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximisable) Mengkonstruksi obyek internal frame yang mengaktifkan resizable, closable dan maximisable serta menonaktifkan iconifiable dari frame dengan title tertentu.
JInternalFrame(String title, boolean resizable, boolean closable, boolean maximisable, boolean iconifiable) Mengkonstruksi obyek internal frame dengan mengaktifkan resizable, closable, maximisable dan iconifiable dari frame dengan title tertentu.

Contoh program di bawah ini menggunakan kelas JDesktopPane dan JInternalFrame untuk membuat program aplikasi MDI. Sebagaimana telah dijelaskan di atas, Anda tetap menggunakan kelas JFrame atau JApplet sebagai komponen jendela level atas (top level window component). Berikut ini adalah kode program dan hasil kompilasinya:

// Nama file : AplikasiMDI.java
// Menggunakan kelas JDesktopPane dan JInternalFrame

// Mengimpor kelas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// Deklarasi kelas
public class AplikasiMDI extends JFrame {

   private JMenuBar mnuBar;
   private JMenu mnuForm;
   private JMenuItem mnuItemFlow, mnuItemGrid, mnuItemBorder;
   private JDesktopPane desktopPane;
   private JInternalFrame intFrameFlow, intFrameGrid, intFrameBorder;
   private JPanel panelFlow, panelGrid, panelBorder;

   // Kontruktor tanpa argumen
   public AplikasiMDI() {

      // Membuat menu
      mnuBar = new JMenuBar();
      mnuForm = new JMenu("Form");
      mnuItemFlow = new JMenuItem("Form With FlowLayout");
      mnuItemGrid = new JMenuItem("Form With GridLayout");
      mnuItemBorder = new JMenuItem("Form With BorderLayout");
      mnuForm.add(mnuItemFlow);
      mnuForm.add(mnuItemGrid);
      mnuForm.add(mnuItemBorder);
      mnuBar.add(mnuForm);
      setJMenuBar(mnuBar);
      
      // menambahkan desktopPane ke content pane kelas JFrame
      desktopPane = new JDesktopPane();

      // Membuat internal frame pertama
      intFrameFlow = new JInternalFrame("FlowLayout", true, true, true, true);
      panelFlow = new JPanel();
      panelFlow.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 3));
      for (int xFlow = 0; xFlow < 5; xFlow++)
         panelFlow.add(new JButton("Tombol" + (xFlow + 1)));
      intFrameFlow.getContentPane().add(panelFlow);
      intFrameFlow.setSize(250, 150);
      intFrameFlow.setDefaultCloseOperation(HIDE_ON_CLOSE);
      
      // Membuat internal frame kedua
      intFrameGrid = new JInternalFrame("GridLayout", true, true, true, true);
      panelGrid = new JPanel();
      panelGrid.setLayout(new GridLayout(3, 2, 3, 3));
      for (int xGrid = 0; xGrid < 5; xGrid++)
         panelGrid.add(new JButton("Tombol" + (xGrid + 1)));
      intFrameGrid.getContentPane().add(panelGrid);
      intFrameGrid.setSize(250, 150);  
      intFrameGrid.setDefaultCloseOperation(HIDE_ON_CLOSE);

      // Membuat internal frame ketiga
      intFrameBorder = new JInternalFrame("BoderLayout", true, true, true, true);
      panelBorder = new JPanel();
      panelBorder.setLayout(new BorderLayout(3, 3));
      panelBorder.add((new JButton("Tombol1")), BorderLayout.LINE_START);
      panelBorder.add((new JButton("Tombol2")), BorderLayout.LINE_END);
      panelBorder.add((new JButton("Tombol3")), BorderLayout.PAGE_START);
      panelBorder.add((new JButton("Tombol4")), BorderLayout.PAGE_END);
      panelBorder.add((new JButton("Tombol5")), BorderLayout.CENTER);
      intFrameBorder.getContentPane().add(panelBorder);
      intFrameBorder.setSize(270, 150);
      intFrameBorder.setDefaultCloseOperation(HIDE_ON_CLOSE);

      desktopPane.add(intFrameFlow);
      desktopPane.add(intFrameGrid);
      desktopPane.add(intFrameBorder);
      getContentPane().add(desktopPane, BorderLayout.CENTER);

      mnuItemFlow.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               intFrameFlow.setLocation(10, 10);
               intFrameFlow.setVisible(true);
            }
         }
      );

      mnuItemGrid.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               intFrameGrid.setLocation(40, 34);
               intFrameGrid.setVisible(true);
            }
         }
      );

      mnuItemBorder.addActionListener(
         new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
               intFrameBorder.setLocation(70, 58);
               intFrameBorder.setVisible(true);
            }
         }
      );

   } // Akhir blok konstruktor
  
   // Metoda main
   public static void main(String[] args) {
      AplikasiMDI frame = new AplikasiMDI();
      frame.setTitle("Kelas AplikasiMDI");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(400, 270);
      frame.setVisible(true);
   }
}

Contoh program di atas memungkinkan Anda untuk membuka tiga obyek internal frame (kelas JInternalFrame) sekaligus menggunakan item menu yang tersedia. Masing-masing internal frame berisi lima tombol yang diletakkan terlebih dahulu di obyek panel (kelas JPanel) dengan tata letak (layout) berbeda. Untuk menampilkan internal frame, Anda menggunakan metoda setVisible. Ada beberapa aturan dalam menggunakan JInternalFrame. Anda harus mengatur ukuran (size) dari internal frame serta lokasi dimana internal frame akan ditampilkan. Agar internal frame dapat dibuka, ditutup dan dibuka kembali, Anda perlu memberi argumen metoda setDefaultCloseOperation dengan HIDE_ON_CLOSE.

Multiple Document Interface (MDI) di Java

Untuk memperbaiki mutu konten, Anda dapat berpartisipasi dengan cara melaporkan apabila menemukan kesalahan ketik, kata-kata rangkap, redaksi kurang pas (jelas), gambar pendukung tidak ada dan sebagainya melalui form Kontak Kami untuk mendapatkan perbaikan. Terima kasih atas kerjasamanya.

Hindro HindriantoHindro adalah pendiri sekaligus admin termasmedia.com dan topikit.com, blog online yang mengulas teknologi informasi. Dunia web mulai ditekuni tahun 2012 dengan mempelajari CMS Joomla dan Wordpress. Beberapa buku yang sekarang dipelajari antara lain PHP, HTML5, ASP.NET 4.5, JavaScript, CSS3, MySQL, Adobe Dreamweaver, Adobe Photoshop dan Adobe Flash.