全部章节 >>>>
本章目录
10.3.2 JTextField与JPasswordField标签组件
10.4.2 JRadioButton单选按钮和JCheckBox复选框组件
10.1 JFrame窗口容器
10.1.1 Swing介绍
- Swing 是一个为Java设计的GUI( Graphical User Interface,图形用户界面)工具包。
- Swing由纯Java实现,不再依赖于本地平台的GUI,因此可以在所有操作系统平台上都保持相同的界面外观。
- 独立于本平台的Swing组件称为轻量级组件。
- Swing组件位于javax.swing包。
- Swing组件采用MVC(Model-View-Controller,即模型-视图-控制器)的设计模式,其中模型用于维护各种状态,视图是组件可视化的表现,控制器用于对各种事件、组件做出相应的响应。当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据进行更新。
10.1.2 JFrame窗口容器应用
- GUI应用程序都需要使用窗体作为最外层的容器,应用中需要使用的其他控件均直接或间接放在窗体中。
- 在Swing GUI中,JFrame是一个顶层容器,可以存放其他组件。
- JFrame类包含了许多实用方法,如定义窗口标题、窗体边框、窗口的大小和位置等。通常通过继承JFrame类来创建一个窗口。
创建窗体的两种方式:
- 直接编写代码,调用JFrame类的构造方法,这种方式适用于窗体简单的情况。
- 继承JFrame类。在继承的类中编写代码,对窗体进行详细的描述,这种方式适用于窗体较复杂的情况。
注意:
JFrame类构造方法创建的窗体是不可见的,需要开发人员通过硬编码的方式,设置窗体的可见性。
JFrame类构造方法创建的窗体默认的大小为0 x 0像素,默认的坐标是(0,0),因此在开发中需要设置窗体的大小。
JFrame常用方法
方法名 | 说明 |
void setLayout(LayoutManager mg) | 设置当前窗体使用的布局管理器 |
void setTitle(String title) | 设置当前窗体的标题 |
void setBounds(int x,int y,int width, int hight) | 设置当前窗体距离桌面坐标原点的位置,x代表横坐标,y代表纵坐标。以及当前窗体的大小,width代表窗体的宽,height代表窗体的高 |
void setSize(int width,int height) | 设置当前窗体的宽和高 |
void setVisible(boolean b) | 设置当前窗体是否可见,参数值为true,表示可以见,为false则表示隐藏当前窗体 |
void setIconImage(Image image) | 设置当前窗体的图标 |
Component add(Component c) | 将指定组件添加至当前窗体中 |
示例:创建JFrame窗体
public class JFrameExample {
public void init(){
//创建窗体对象
JFrame frame=new JFrame();
//修改窗体图标为“android.gif”
ImageIcon ico=new ImageIcon("E://android.gif");
//设置JFrame窗体的显示位置和大小
frame.setBounds(100,100, 450, 300);
//设置窗体的标题
frame.setTitle("JFrame窗体");
//设置窗体的图标
frame.setIconImage(ico.getImage());
//窗体显示
frame.setVisible(true);
}
public static void main(String[] args) {
JFrameExample jfe=new JFrameExample();
jfe.init();
}
}
10.1.3 实践练习
10.2 布局管理器
10.2.1 FlowLayout流式布局管理器
- 类似流程或文本处理器处理一段文字,它将组件一排一排依次放置。
- 常用于JRadioButton单选按钮或JCheckBox复选框等组件的排列。
FlowLayout构造方法说明
构造方法 | 说明 |
FlowLayout() | 使用居中方式构造FlowLayout的布局 |
FlowLayout(int align) | 使用给定对齐方式,且垂直和水平间隔为5个像素。 例如,setLayout(new FlowLayout(FlowLayout.LEFT)); |
FlowLayout(int align,int hgap,int vgap) | 使用给定对齐方式,且指定垂直和水平间隔。容器默认居中放置。hgap和vgap为组件之间垂直和水平间隔(单位为像素)。 例如,setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); |
示例: 按流式布局管理器格式放置兴趣课程单选按钮
public class FlowLayExample extends JFrame {
public FlowLayExample() {
super("FlowLayout布局管理器");
}
public void init(){
JRadioButton jrb1=new JRadioButton("音乐"); //创建单选按钮
JRadioButton jrb2=new JRadioButton("体育");
...
this.add(jrb1);
this.add(jrb2);
//创建FlowLayout管理器对象
FlowLayout fl=new FlowLayout(FlowLayout.RIGHT,5,15);
//指定JFrame窗体布局管理器
this.setLayout(fl);
this.setSize(300,150);
this.setVisible(true);
}
public static void main(String[] args) {
FlowLayExample layExample=new FlowLayExample();
layExample.init();
}
}
10.2.2 GridLayout网格布局管理器
- 网格布局管理器即GridLayout布局管理,其布局管理格式是将窗体分割成行数×列数的格子状版面,组件按照由左至右,由上而下的次序排列。
GridLayout构造方法说明
构造方法 | 说明 |
GridLayout | 构造具有一行一列的Gridlayout的布局 |
GridLayout(int rows,int cloumns) | 构造指定行数和列数的GridLayout的布局 |
GridLayout(int rows, int cloumns,int hgap,int vgap) | 构造指定行数和列数的、各组件之间的相互间隔的GridLayout的布局 |
示例:按网格布局管理器格式放置JButton按钮
public class GridLayoutExample extends JFrame{
//创建布局管理器
private GridLayout gridLayout=new GridLayout();
...
public void init(){
JButton btn1=new JButton("按钮1");
JButton btn2=new JButton("按钮2");
...
//设置窗体的布局格式
this.setLayout(gridLayout);
gridLayout.setColumns(3);//设置列数
gridLayout.setHgap(5);//设置垂直间距
gridLayout.setRows(3);//设置行数
gridLayout.setVgap(5);//设置水平间距
//依次将标签、文本框、下拉列表框添加到this中
this.add(btn1,null);
this.add(btn2,null);
...
//设置窗体可见
this.setVisible(true);
}
...
}
GridLayout网格布局与FlowLayout流式布局相同,都会自动管理组件的大小和位置,两者的不同之处是,网格布局会尽可能的将组件充满窗口,而流式布局则不会。
10.2.3 BoraderLayout边框布局管理器
- BorderLayout的布局管理器将容器内的空间分为东、西、南、北、中5个区域,分别用EAST、WEST、SOUTH、NORTH、CENTER表示。
- 向容器中加入每个组件时,都要指明其放在容器的哪个区域,如果某个区域没有分配组件,则其他组件可以占据该区域的控件。
BorderLayout构造方法说明
构造方法 | 说明 |
BorderLayout() | 构造BorderLayout的布局 |
BorderLayout(int hgap,int vgap) | 构造组件之间具有指定间隔的BorderLayout布局 |
示例:按边框布局管理器格式放置JButton按钮
public void init(){
//创建JButton对象
btn1=new JButton("东");
btn2=new JButton("南");
btn3=new JButton("西");
btn4=new JButton("北");
btn5=new JButton("中");
BorderLayout bl=new BorderLayout();
this.getContentPane().setLayout(bl);
//将5个按钮分别添加到窗口的不同区域
this.add(btn1,BorderLayout.EAST);
this.add(btn2,BorderLayout.WEST);
this.add(btn3,BorderLayout.SOUTH);
this.add(btn4,BorderLayout.NORTH);
this.add(btn5,BorderLayout.CENTER);
this.setSize(450,300);
this.setVisible(true);
}
10.2.4 实践练习
10.3 常用控件(一)
10.3.1 JLabel标签组件
- JLabel类创建标签组件,它除了能显示文字外,还允许添加图像,且当鼠标移动到标签位置时,会显示一段文字提示
示例:JLabel标签示例
//通过调用父类构造器为窗体创建名称
super("JLabel组件窗口");
//设置流式布局管理器
this.setLayout(new FlowLayout(100,100,100));
//创建图片ImageIcon对象
Icon icon=new ImageIcon("e://mst.png");
//设置标签中仅包含文字
label1=new JLabel(icon);
//设置标签中仅包含文字、图像水平居中
label2=new JLabel("MStanford");
label2.setIcon(icon);
//设置标签的提示信息
label1.setToolTipText("只是一个Label标签");
//添加label1
this.add(label1);
this.add(label2);
10.3.2 JTextField与JPasswordField标签组件
- JTextField只能用于输入单行文本,如果文本的长度超出了控件可以显示的范围,其会自动滚动文本。
- 针对JTextField,所有的剪切、复制、粘贴及其快捷键的操作都可以自动工作。
- JPasswordField密码框组件。继承自JTextField,因此其操作方法与JTextFiled相同。
示例:JTextField和JPasswordField标签示例
this.setSize(360,230);
//使用空布局,容器中的组件可通过坐标定位
this.setLayout(null);
jLabel1=new JLabel("账号");
//设置jLabel1的位置,4个参数代表居左、居上,文字的宽、高
jLabel1.setBounds(30,38,80,25);
jLabel2=new JLabel("密码");
jLabel2.setBounds(30,80,80,25);
//jTextField1的位置4个参数代表居左、居上,文本框的宽、高
jTextField.setBounds(100,40,160,25);
jPasswordField.setBounds(100,80,160,25);
//将组件添加至容器中
this.add(jLabel1);
this.add(jLabel2);
this.add(jTextField);
this.add(jPasswordField);
10.3.3 JButton按钮组件
- JButton可以设置文字、图形,还可以设置底色、动态效果等。
示例:JButton按钮组件示例
Icon icon1=new ImageIcon("E://sure.png");
Icon icon2=new ImageIcon("E://refresh.jpg");
Icon icon3=new ImageIcon("E://download.jpg");
//创建按钮,并在按钮上添加图标
JButton button1=new JButton("确定",icon1);
JButton button2=new JButton("刷新",icon2);
JButton button3=new JButton("下载",icon3);
this.add(button1);
this.add(button2);
this.add(button3);
this.setSize(600,200);
this.setVisible(true);
10.3.4 JPanel面板组件
- JPanel面板是非常常用的非顶层容器之一,可以将其他控件放在JPanel中,以组成一个子界面。
- 所谓的非顶层容器通常扮演双重角色,对于添加到其中的控件,其扮演容器的角色,而对于其要添加进的容器,则其扮演一般控件的角色。
- 通过嵌套使用JPanel,可以搭建出复杂美观的界面。
示例:JPanel和布局管理器综合示例
public void init(){
//设置布局管理器
GridLayout gl=new GridLayout();
BorderLayout bl=new BorderLayout();
FlowLayout fl=new FlowLayout();
//创建按钮
JButton button1=new JButton("确定");
JButton button2=new JButton("取消");
//创建标签
JLabel label1=new JLabel("姓名");
JLabel label2=new JLabel("性别");
JLabel label3=new JLabel("年龄");
//创建文本框
JTextField text1=new JTextField();
JTextField text2=new JTextField();
JTextField text3=new JTextField();
//设置窗口大小
this.setSize(400,192);
this.setLayout(bl);
//将两个按钮放入到jPanel1中,将jPanel1设置为FlowLayout布局
jPanel1.setLayout(fl);
//将button放置于jPaenl1中
jPanel1.add(button1);
jPanel1.add(button2);
//设置jPanel2为GridLayout布局,3行2列的布局格式
jPanel2.setLayout(gl);
gl.setColumns(2);//设置列数
gl.setHgap(5);//这是垂直间距
gl.setRows(3);//设置行数
gl.setVgap(5);//设置水平间距
//依次将标签、文本框添加到jPanel2中
jPanel2.add(label1);
jPanel2.add(text1);
jPanel2.add(label2);
jPanel2.add(text2);
jPanel2.add(label3);
jPanel2.add(text3);
//依次将jPanel1、jPanel2添加到窗口的下方和中间位置
this.add(jPanel1,BorderLayout.SOUTH);
this.add(jPanel2,BorderLayout.CENTER);
…
}
10.3.5 实践练习
10.4 常用控件(二)
10.4.1 JComboBox选择框组件
JComboBox为下拉列表框组件,其特点是将所有选项折叠收藏,仅显示前面一个选项或被用户选中的某一个选项。
JComboBox常用方法说明
构造方法 | 说明 |
addItem(Object anObject) | 为下拉列表添加下拉项 |
setMaximumRowCount(int count) | 设置JComboBox显示的最大行数 |
示例:使用JComboBox下拉显示国籍信息
//创建下拉列表框对象
jComboBox=new JComboBox();
//为列表添加下拉选项
jComboBox.addItem("中国");
jComboBox.addItem("美国");
jComboBox.addItem("德国");
jComboBox.addItem("韩国");
jComboBox.addItem("英国");
//设置下拉列表框最多显示4行
jComboBox.setMaximumRowCount(4);
//将下拉列表框添加到jPanel中
jPanel.add(jLabel);
jPanel.add(jComboBox);
this.add(jPanel);
this.setSize(300, 200);
this.setVisible(true);
10.4.2 JRadioButton单选按钮和JCheckBox复选框组件
- JRadionButton表示单选按钮。
- ButtonGroup类为单选按钮提供多选一功能,在一组单选按钮中,用户只能选择一个单选按钮,当选择一个单选按钮时,此单选按钮的状态为“ON”,其余单选按钮的状态为“OFF”
- JCheckBox表示复选框,一组复选框中可以有多个复选框同时被选中。
使用JRadioButton组件,首先需要创建ButtonGroup对象,然后将创建的JRadioButton组件对象,添加至ButtonGroup对象中。
示例:JRadioButton单选按钮和JCheckBox复选框组件示例
//创建单选按钮组对象
private ButtonGroup group=new ButtonGroup();
jLabel=new JLabel("兴趣");
jLabe2=new JLabel("性别");
//复选框
box1=new JCheckBox("台球");
box2=new JCheckBox("篮球");
box3=new JCheckBox("编程");
jLabe2=new JLabel("性别");
//单选按钮
jbr1=new JRadioButton("男性");
jbr2=new JRadioButton("女性");
//添加单选按钮到单选按钮组
group.add(jbr1);
group.add(jbr2);
//添加单选按钮到窗口
this.add(jLabel);this.add(box1);this.add(box2);
this.add(box3);this.add(jLabe2);this.add(jbr1);this.add(jbr2);
10.4.3 实践练习
总结:
Swing是一个为Java设计的GUI( Graphical User Interface,图形用户界面)工具包,它由纯Java实现,不再依赖于本地平台的GUI,因此可以在所有操作系统平台上都保持相同的界面外观。Swing组件为轻量级组件。
JFrame是一个顶层容器,可以存放其他组件。
常见的布局管理器
FlowLayout流式布局管理器:类似流程或文本处理器处理一段文字,它将组件一排一排依次放置。
GridLayout网格布局管理器:其布局管理格式是将窗体分割成行数×列数的格子状版面,组件按照由左至右,由上而下的次序排列。
和BorderLayout边框布局管理器:将容器内的空间分为东、西、南、北、中5个区域,分别用EAST、WEST、SOUTH、NORTH、CENTER表示。
Swing常用组件有JLabel标签、JTextField文本、JPasswordField密码、JButton按钮、JPanel面板、JComboBox选择框、JRadioButton单选按钮、JCheckBox复选框。
使用JRadioButton组件,首先需要创建ButtonGroup对象,然后将创建的JRadioButton组件对象,添加至ButtonGroup对象中。