Multiple Document Interface.

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

Kelas JDesktopPane.

JDesktopPane adalah kelas wadah (container class) untuk membuat MDI. Dalam membuat MDI, Anda tetap menggunakan kelas JFrame atau JApplet sebagai jendela luar (outer window), kemudian menambahkan obyek kelas JDesktopPane ke content pane kelas JFrame atau JApplet dan kemudian menambahkan obyek kelas JInternalFrame ke obyek JDesktopPane. JDesktopPane sendiri tidak mendukung border dan selalu diletakkan area tengah content pane kelas JFrame atau JApplet. Kelas JDesktopPane mempunyai sebuah konstruktor untuk mengkonstruksi obyek desktop pane.

   // Mengkonstruksi obyek desktop pane
   JDesktopPane()

Kelas JInternalFrame.

Kelas JInternalFrame adalah turunan kelas JComponent. JInternalFrame digunakan untuk membuat jendela (window) di dalam jendela yang lain. JInternalFrame mempunyai banyak fitur sebagaimana frame pada 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 saja, menambahkan komponen di conten pane dari kelas JInternalFrame dapat menggunakan metoda add, sedangkan menentukan ukuran frame dari obyek internal frame 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);
   }
}
Multiple Document Interface (MDI) di Java

Contoh program di atas memungkinkan Anda untuk membuka tiga obyek internal frame dari 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.

SUKAI DAN BAGIKAN ARTIKEL INI:
Pin It