您的位置:首页 > 编程语言 > Java开发

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

2016-09-26 20:19 429 查看
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的使用 

 JPanel是Java图形化界面中最常使用的容器。

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

    }  

}  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息