窗体是底层容器,用于放各种组件,常见的容器有JFrame和JDialog两种,JPanel是中间容器,可以放在底层容器中,使用中间容器便于基本组件的管理。布局管理是将容器中的组件按照一定的规则和方式放在容器中。那么,如何定义一个容器呢?容器有大有小,有位置,有标题,这些如何设计呢?中间容器是底层容器和组件的缓冲器,那么,一个框架中可以有两个JPanel?如何在Jpanel中加入各种组件呢?界面布局有很多类型,常见的布局应该如何定义呢?如果不采用布局,各个组件的位置当如何定义?
(一)容器
容器是用来放各种组件的界面,常见的容器有窗口,对话框,和面板。在定义底层容器的时候需要考虑容器的位置,大小,是否可见,关闭时的操作等。
Frame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 是Java图形用户界面(GUI)工具包swing中的存放组件的容器。相当于相框。
JPanel类,是Java图形用户界面(GUI)工具包swing中的面板容器类。相当于画板。
(1)窗体
JavaSwing_4.1: JFrame(窗口
JFrame;窗体,窗体类似于饭店的桌子或放相片的相框,窗体用来显示给用户界面的整体视感。
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TEST02 extends JFrame{ //需要继承JFrame
public TEST02(String title)
{
JFrame jf = new JFrame(title);
Container conn = jf.getContentPane(); //得到窗口的容器
JLabel L1 = new JLabel("Hello,world!"); //创建一个标签 并设置初始内容
conn.add(L1); //向容器中加入标签
jf.setBounds(200,200,300,200); //设置窗口的属性 窗口位置以及窗口的大小
jf.setVisible(true);//设置窗口可见
jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置关闭方式 如果不设置的话 似乎关闭窗口之后不会退出程序
}
public static void main(String[] args) {
new TEST02("窗口"); //创建窗口
}
}
(2)面板
JavaSwing_4.2: JDialog(对话框)
JPanel:面板组件,非顶层容器。
一个界面只可以有一个JFrame窗体组件,但是可以有多个JPanel面板组件,而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用,达到较为复杂的布局效果。
import java.awt.*;
import javax.swing.*;
public class TEST02 extends JFrame{
//定义组件
JPanel jp1,jp2;//定义两个面板
JButton jb1,jb2,jb3,jb4,jb5,jb6;//定义按钮
public static void main(String[] args) {
TEST02 dm=new TEST02();
}
//构造函数
public TEST02()
{
//创建组件
//面板组件JPanel布局模式默认的是流式布局FlowLayout
//实例化面板
jp1=new JPanel();
jp2=new JPanel();
//实例化按钮
jb1=new JButton("西瓜");
jb2=new JButton("苹果");
jb3=new JButton("荔枝");
jb4=new JButton("葡萄");
jb5=new JButton("橘子");
jb6=new JButton("香蕉");
//设置布局,JPanel默认布局FlowLayout,
//把组件添加JPanel
jp1.add(jb1);
jp1.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);
//把JPanel加入到JFrame,采用流式布局,将按钮放在不同的位置
this.add(jp1,BorderLayout.NORTH);
this.add(jb6,BorderLayout.CENTER);
this.add(jp2,BorderLayout.SOUTH);
//设置窗口属性
this.setSize(300,200);
this.setLocation(700,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}
}