1.1Swing概述:
Swing被称为轻量级组件,因为它是由Java编写的Java是不依赖于操作系统的语言,相反,重量级组件是依赖于本地平台的组件
常用Swing组件概述
1.2常用窗体
1.2.1JFrame窗体
//窗体作为Swing组件应用程序的重要载体处于非常重要的位置,Swing常用的窗体包括JFrame和JDialog
//JFrame窗体是一个容器,可将JFrame窗体看做是承载这些组建的容器,开发时可以通过继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件添加时间,由于该窗体继承了JFrame类,它用有最大化、最小化、关闭等按钮。
//语法如下:
JFrame jf=new JFrame(title);
Container container=jf.getContainerPane();
//jf:JFrame类的对象
//container: Container类的对象,可以使用jf对象调用getContainerPane()方法获得
//通俗地说,在JFrame对象创建·完毕之后,调用getContainerPane()方法将窗体转换为容器
//在容器中添加组件
container.add(new JButton("按钮"));
//删除组件
container.remove(new JButton("按钮"));
package 拍;
import javax.swing.*;
import java.awt.*;
public class Example1 extends JFrame { //定义一个类继承JFrame类
public void CreateJFrame(String title){ //定义一个CreateJFrame()方法
JFrame jf=new JFrame(title); //实例化一个JFrame对象
Container container=jf.getContentPane(); //获取一个容器
JLabel jl=new JLabel("这是一个JFrame窗体"); //创建一个JLable标签
jl.setHorizontalAlignment(SwingConstants.CENTER); //使标签文字居中
container.add(jl); //给容器添加标签
container.setBackground(Color.blue); //设置容器背景颜色
jf.setVisible(true); //使窗体可见
jf.setSize(200,150); //设置窗体大小
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置窗体关闭方式
}
public static void main(String args[]){ //在主方法中调用方法
new Example1().CreateJFrame("创建一个JFrame窗体");
}
}
//JFrame常用的构造方法有俩种
public JFrame()
public JFrame(String title)
//第一种方法可以创建一个初始不可见,没有标题的新窗体。第二种方法实例化该对象时,可以创一个不可见但是具有标题的窗体,通过常使用setVisible(true)方法使窗体可见,和设置床体大小
1.2.2JDialog窗体
//JDialog窗体的功能是从一个窗体中弹出另一个窗体,它与JFrame窗体类似,使用时也需要调用getContainerPane()方法将窗体转换为容器,然后在容器中设置窗体的特型
//在程序中创建JDialog窗体通过需要实例化JDialog类,通常有以下几个方法
public JDialog();创建一个没有标题和父窗口的对话框
public JDialog(Frame f);创建一个指定父窗体的对话框,且没有标题
public JDialog(Frame f,boolean model);创建一个指定类型的对话框,只是指定了父窗口,但是没有指定标题
public JDialog(Frame f,String title);创建一个指定标题和父窗口的对话框
public JDialog(Frame f,String title,boolean model);给定一个指定标题、窗口和模式的对话框
package 拍;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class MyJDialog extends JDialog {
public MyJDialog(MyFrame frame){
super(frame,"第一个JDialog窗体",true); //实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型
Container container=getContentPane(); //创建一个容器
container.add(new JLabel("只是一个对话框")); //在容器中添加标签
setBounds(120,120,100,100); //设置对话框窗体的大小
}
}
public class MyFrame extends JFrame{
public static void main(String args[]){
new MyFrame(); //实例化MyJDialog类对象
}
public MyFrame(){
Container container=getContentPane(); //创建一个容器
container.setLayout(null);
JLabel jl=new JLabel("这是一个JFrame窗体"); //在窗体中设置标签
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl);
JButton bl=new JButton("弹出对话框"); //定义一个按钮
bl.setBounds(10,10,100,21);
bl.addActionListener(new ActionListener() { //为按钮添加鼠标单击事件
@Override
public void actionPerformed(ActionEvent actionEvent) {
//使MyJDialog窗体可见
new MyJDialog(MyFrame.this).setVisible(true);
}
});
container.add(bl); //将按钮添加到容器中
}
}
1.3标签组件与图标
//Swing中显示文本或是提示信息的方法使使用标签,它支持文本字符串和图标
//JLable的几种构造方式
1.3.1创建图标
//Swing中通过Icon接口来创建图标且创建时给定图标的一些特性,实现Icon接口的3个方法如下:
public int getIconHeight();
public int getIconWidth();
public void paintIcon(Component arg(),Graphics arg1,int arg2,int arg3)
//前俩个用来指明获取图标的长和宽,第三个用于实现在指定的位置画图
package 拍;
import javax.swing.*;
import java.awt.*;
public class DrawIcon implements Icon { //实现Icon接口
private int width; //声明图标的宽和高
private int height;
public int getIconHeight(){ //实现getIconHeight()的方法
return this.height;
}
public int getIconWidth(){
return this.width;
}
public DrawIcon(int width,int height){ //定义构造方法
this.height=height;
this.width=width;
}
//实现paintIcon()方法
public void paintIcon(Component arg0,Graphics arg1,int x,int y){
arg1.fillOval(x,y,width,height); //绘制一个图形
}
public static void main(String args[]){
DrawIcon icon=new DrawIcon(5,15);
//创建一个标签,并设置标签上面的文字在标签中间
JLabel j=new JLabel("测试",icon,SwingConstants.CENTER);
JFrame jf=new JFrame(); //创建一个JFrame窗口
Container c=jf.getContentPane();
}
}
1.3.2使用图片图标
//使用图片图片几种常用的构造方法如下:
1.4常用布局管理器
//布局管理器使程序员直接在容器中控制Swing组件的位置和大小;常用的布局管理器:流布局管理器、边界布局管理器、网格布局管理器
1.4.1绝对布局
//硬性指定组件在容器中的位置和大小;步骤如下:
Container.setLayout(null)方法取消布局管理器
Component.setBounds()方法设置每个组件的大小与位置(使窗体对象调用此方法,则x,y代表整个屏出现的位置,若是在窗体内部组件调用则是在窗体中)
package 拍;
import javax.swing.*;
import java.awt.*;
public class AbsolutePosition extends JFrame {
public AbsolutePosition(){
setTitle("本窗体使用绝对布局"); //设置窗体标题
setLayout(null); //使该窗体取消布局管理器
setBounds(0,0,200,150); //绝对定位窗体的位置坐标与大小
Container c=getContentPane(); //创建容器对象
JButton b1=new JButton("按钮1");
JButton b2=new JButton("按钮2");
b1.setBounds(10,30,80,30); //设置按钮的位置和大小
b2.setBounds(60,70,100,20);
c.add(b1); //将按钮添加到容器中
c.add(b2);
setVisible(true); //使窗体可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置窗体关闭方式
}
public static void main(String args[]){
new AbsolutePosition();
}
}
1.4.2流布局管理器
//流布局管理器使最基本的布局管理器,它使组件从左到右摆放,直至占据了这一行的所有空间,然后再向下移动一行,默认情况下,每行组件都是居中排列
FlowLayout.LEFT=0 //左对齐
FlowLayout.CENTER=1 //居中
FlowLayout.RIGHT=2 //右对齐
//常用的构造方法如下:
public FlowLayout()
public FlowLayout(int alignment)
public FlowLayout(int alignment,int horizGap,int vertGap)
//注意:手动收缩窗体大小自适应
package 拍;
import javax.swing.*;
import java.awt.*;
import java.net.PortUnreachableException;
public class FlowLayoutPosition extends JFrame {
public FlowLayoutPosition(){
setTitle("本窗体使用流布局管理器");
Container container=getContentPane();
//设置组件流布局管理,使组件右对齐,且设置组件之间的水平间隔与垂直间隔
setLayout(new FlowLayout(2,10,10));
for (int i=0;i<10;i++){
container.add(new JButton("button"+i));
}
setSize(300,200);
setVisible(true); //使窗体可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new FlowLayoutPosition();
}
}
1.4.3边界布局管理器
//在不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器,区域控制可以使用BorderLayout类中成员变量来决定位置
1.4.4网格布局管理器
//网格布局管理器将容器划分为网格,每个组件大小都相同,从左上角开始,从左到右,从上到下,一次排列,每个组件都会填满网格
//常用的俩个构造方法如下:
public GridLayout(int rows,int columns)
public GridLayout(int rows,int columns,int horizGap,int vertGap)
//行参数和列参数只有一个能为0,int horizGap,int vertGap,指定网格之间的距离
package 拍;
import javax.print.DocFlavor;
import javax.swing.*;
import java.awt.*;
public class GridLayoutPositon extends JFrame {
public GridLayoutPositon(){
Container c=getContentPane();
//设置网格布局管理器,设置7行4列的网格
setLayout(new GridLayout(7,3,5,5));
for (int i=0;i<20;i++){
c.add(new JButton("button"+i)); //循环添加按钮
}
setSize(300,300);
setTitle("这是一个网格布局管理器");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new GridLayoutPositon();
}
}