1. 程式人生 > >【Java系列】(一)Java圖形化介面設計——中間容器(Jpanel)

【Java系列】(一)Java圖形化介面設計——中間容器(Jpanel)

Swing 程式用JFrame 物件實現了它們的視窗。JFrame 類是AWT Frame 類的一個子類。它還加入了一些Swing 所獨有的特性。與 Frame 的使用十分相似。唯一的區別在於,你不能將元件加入到JFrame中。你可以或者將元件加入到JFrame 的content pane(內容面板) 中,或者提供一個新的content pane(內容面板)

 面板與頂層容器的不同點:面板不能獨立存在,必須被新增到其他容器內部(面板可以巢狀)。

  JFrame 有一個 Content Pane的視窗,能顯示的所有元件都是新增在這個 Content Pane 中。JFrame 提供了兩個方法: getContentPane 和 setContentPane 就是用於獲取和設定其 Content Pane 的。
  

    對JFrame新增元件有兩種方式:
  1)用 getContentPane ()方法獲得JFrame的內容面板,再對其加入元件:frame.getContentPane().add(childComponent)
  2)建立一個Jpanel或JDesktopPane之類的中間容器,把元件新增到容器中,用setContentPane()方法把該容器置為JFrame的內容面板:
    JPanel contentPane = new JPanel();
    ……//把其它元件新增到Jpanel中;
    frame.setContentPane(contentPane);
    //把contentPane物件設定成為frame的內容面板

一般用第一中方法新增元件。

注意:用setContentPane()方法不允許設定窗體佈局,其只顯示最後新增的元件,且該元件將佈滿整個視窗,而不管原先元件的大小設定,相當於只允許新增一次元件作為JFrame的內容面板。所以一般不實用該方法進行新增元件(可能是我不知道吧)。

2、  JPanel的使用

 JPanelJava圖形化介面中最常使用的容器。

例項1:在窗體中新增一個藍色的面板

package frame;

import javax.swing.*;

import java.awt.*; //引入AWT包,因為要使用到顏色類

public class PanelDemo {

    public static void main(String[] args) throws Exception {

    JFrame f = new JFrame("第一個Java視窗");

    f.setSize(300,200);

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    f.setVisible(true);

    f.setResizable(false);

    f.setLocationRelativeTo(null);

    f.setLayout(null); //設定窗體佈局為空佈局

    JPanel p = new JPanel(); //例項化一個面板

    //設定面板顏色,如果不引入AWT包,程式將出錯

    p.setBackground(Color.BLUE);

    p.setSize(100,100); //設定面板物件大小

    //用getContentPane()方法獲得JFrame的內容面板

    f.getContentPane().add(p); //將面板加到窗體中

    //如果使用下面面板新增方法,面板將佈滿整個視窗

    //f.setContentPane(p);

    }

}

中間容器可以巢狀中間容器

例項2:面板的巢狀

package frame;

import java.awt.Color;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class TwoPanel extends JFrame {

public TwoPanel(String title) {

super(title);

}

    public static void main(String[] args) {

    TwoPanel tp = new TwoPanel("TWO Panel測試");

    JPanel p1 = new JPanel();

    JPanel p2 = new JPanel();

    tp.setLayout(null);

    tp.getContentPane().setBackground(Color.green); //設定視窗的顏色

    tp.setSize(250, 250);

    p1.setLayout(null); //設定面板佈局

    p1.setSize(150, 150);

    p1.setBackground(Color.red);

    p2.setBackground(Color.yellow);

    p2.setSize(50, 50);

    p1.add(p2); //將面板p2新增到p1中

        //將pan1新增到窗體中,因為pan2被新增到pan1中,所以pan1、pan2都被顯示在窗體中

    tp.getContentPane().add(p1);

    tp.setResizable(false);

    tp.setVisible(true);

    tp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

例項三:

package frame;

import java.awt.*;  

import javax.swing.*;  

public class JFrameWithPanel {  

    public static void main(String[] args) {  

        JFrame frame = new JFrame("Frame With Panel");  

        Container contentPane = frame.getContentPane();  

        contentPane.setBackground(Color.CYAN); // 將JFrame例項背景設定為藍綠色  

        JPanel panel = new JPanel(); // 建立一個JPanel的例項  

        panel.setBackground(Color.yellow); // 將JPanel的例項背景設定為黃色  

        JButton button = new JButton("Press me");  

        panel.add(button); // 將JButton例項新增到JPanel中  

        contentPane.add(panel, BorderLayout.SOUTH); // 將JPanel例項新增到JFrame的南側  

        frame.setSize(300, 200);  

        frame.setVisible(true);  

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }  

}