[Java學習]JInternalFrame的使用(窗口與面板)

本文轉載自:ITEEDU

 java.lang.Object
    --java.awt.Component
    --java.awt.Container
       --javax.swing.JComponent
             --javax.swing.JInternalFrame

JinternalFrame的使用跟JFrame幾乎一樣,可以最大化、最小化、關閉窗口、加入菜單等功能;唯一不同的是JinternalFrame是 lightweight component ,也就是說JInternalFrame不能單獨出現,必須依附在最上層組件上。由於這個特色,JInternalFrame能 夠利用java提供的Look and Feel功能作出完全不同於原有操作系統所提供的窗口外型,也比JFrame更具有彈性。

一般我們會將Internal Fram加入Desktop Pane方便管理,Desktop Pane是一種特殊的Layered pane,用來建立虛擬桌面(Vitual Desktop).它可以顯示並管理衆多Internal Frame之間的層次關係。以下是JDesktopPane的類層次結構圖;

類層次結構圖:

 java.lang.Object
     --java.awt.Component
     --java.awt.Container
     --javax.swing.JComponent
     --javax.swing.JLayeredPane
     --javax.swing.JDesktop

我們先來看看如何構造JInternalFrame與JDesktopPane,再來看它跟Desktop Pane之間的關係。下面分別是JInternalFram與 JDesktopPane的構造函數:

  • JInternalFrame構造函數:

    –JInternalFrame():建立一個不能更改大小、不可關閉、不可最大最小化、也沒有標題的Internal Frame。

    –JInternalFrame(String title,boolean resizable):建立一個不可關閉、不可最大最小化、但可變更大小且具有標題的 Internal Frame。

    –JInternalFrame(String title,boolean resizable,boolean closable):建立一個可關閉、可更改大小、且具有標題,但不可 最大化最小化的Internal Frame.

    –JInternalFrame(String title,boolean resizable,boolean closable
    ,boolean maximizable,boolean iconifiable): 建立一個可關閉、可更改大小、具有標題、可最大化與最小化的Internal Frame.

  • JDesktopPane構造函數:
    –JDesktopPane():建立JDesktopPane組件。


如何利用JDesktoPane來管理JInternalFrame:

JInternalFrame1.java

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class JInternalFrame1 extends JFrame implements ActionListener {

    JDesktopPane desktopPane;
    int count = 1;

    public JInternalFrame1() {
        super("JInternalFrame1");
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());

        JButton b = new JButton("Create New Internal Frames");
        b.addActionListener(this);// 當用戶按下按鈕時,將運行actionPerformed()中的程序
        contentPane.add(b, BorderLayout.SOUTH);
        /*
         * 建立一個新的JDesktopPane並加入於contentPane中
         */
        desktopPane = new JDesktopPane();
        contentPane.add(desktopPane);

        setSize(350, 350);
        show();

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    /*
     * 產生一個可關閉、可改變大小、具有標題、可最大化與最小化的Internal Frame.
     */
    public void actionPerformed(ActionEvent e) {
        JInternalFrame internalFrame = new JInternalFrame("Internal Frame "
                + (count++), true, true, true, true);

        internalFrame.setLocation(20, 20);
        internalFrame.setSize(200, 200);
        internalFrame.setVisible(true);
        // 取得JInternalFrame的Content Pane,用以加入新的組件。
        Container icontentPane = internalFrame.getContentPane();
        JTextArea textArea = new JTextArea();
        JButton b = new JButton("Internal Frame Button");
        /*
         * 將JTextArea與JButton對象加入JInternalFrame中。由此呆知,JInteranlFrame加入組件
         * 的方式與JFrame是一模一樣。
         */
        icontentPane.add(textArea, "Center");
        icontentPane.add(b, "South");
        // 將JInternalFrame加入JDesktopPane中,如此一來,即使產生很多JInternalFrame,JDesktopPane也
        // 能將它們之間的關係管理得相當良好。
        desktopPane.add(internalFrame);

        try {
            internalFrame.setSelected(true);
        } catch (java.beans.PropertyVetoException ex) {
            System.out.println("Exception while selecting");
        }
    }

    public static void main(String[] args) {
        new JInternalFrame1();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章