【Java系列】(一)Java图形化界面设计——中间容器(Jpanel)

时间:2022-08-08 23:07:40

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的使用 

【Java系列】(一)Java图形化界面设计——中间容器(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);

    }

}


 【Java系列】(一)Java图形化界面设计——中间容器(Jpanel)

中间容器可以嵌套中间容器

实例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);

    }

}


【Java系列】(一)Java图形化界面设计——中间容器(Jpanel)

实例三:

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);

    }  

}  

【Java系列】(一)Java图形化界面设计——中间容器(Jpanel)