JAVASE学习(13)Swing

图形界面(Grephics User Interface,GUI

Sun提供了一个跨平台GUI开发工具包AWT抽象窗口工具箱(Abstract Window Toolkit)

=>Sun又创建一个新的gui框架swing,解决了awt存在的Icd问题

=>IBM认为swing比较消耗内存,创建了一个新的GUI库,SWT

=>IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能更强大的图形包“JFace”

JFrame

1)JFrame是Frame的子类

2)属于容器类组件,顶层容器

3)JFrame一些常用的方法

JButton

1)JButton是AbsractButton的子类

2)属于容器类组件,可以加入别的组件

3)Swing包的按钮组件不只有JButton,还有单选按钮(JRadioButton)、箭头按钮(BasicButton)、触发器按钮(JToggleButton)...

布局管理器

1)概念

组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理

2)种类

java中5种布局管理器:

流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。

/*
 * 功能:GUI界面开发演示
 * */
package com.test;
//引入包
import java.awt.*;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo1 extends JFrame{
	//把需要的swing组件定义到这里
	JButton jb=null;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//JFrame是一个顶层容器类(可以添加其他swing组件的类)
		//JFrame jf=new JFrame();
		Demo1 demo1=new Demo1();
		
	}
	//构造函数
	public Demo1() {
		// TODO Auto-generated constructor stub
		//创建一个button按钮
				jb=new JButton("按钮");
			
				//添加JButton组件
				this.add(jb);
				//给窗体设置标题
				this.setTitle("hello,world!");
				//设置大小,按像素[1像素=]
				this.setSize(200,200);
				//设置初始位置
				this.setLocation(100, 150);
				//设置当关闭窗口时,保证jvm也退出
				this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				//显示
				this.setVisible(true);
	}

}



边界布局管理器(BorderLayout):

将容器划分为东南西北中5个区域,中间区域最大。

注意事项:

1、不是五个部分都必须添加

2、中部组件会自动的调节大小

3、JFrame,JDialog默认布局管理器就是BorderLayout

/*
 * BorderLayout演示
 * 1.继承JFrame
 * 2.定义需要的组件
 * 3、创建组件
 * 4、对窗口设置
 * 6、显示窗体
 * */
package com.test;
import java.awt.*;
import javax.swing.*;

public class Demo2 extends JFrame{
	//定义组件
	JButton jb1,jb2,jb3,jb4,jb5;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo2 demo2=new Demo2();
	}
	public Demo2() {
		// TODO Auto-generated constructor stub
		//创建组件
		jb1=new JButton("中部");
		jb2=new JButton("北部");
		jb3=new JButton("东部");
		jb4=new JButton("南部");
		jb5=new JButton("西部");
		//添加各个组件
		this.add(jb1, BorderLayout.CENTER);
		this.add(jb2, BorderLayout.NORTH);
		this.add(jb3, BorderLayout.EAST);
		this.add(jb4, BorderLayout.SOUTH);
		this.add(jb5, BorderLayout.WEST);
		
		//设置窗体属性
		this.setTitle("边界布局案例");
		this.setSize(300, 200);
		this.setLocation(200,300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}


流式布局FlowLayout

按照组件的添加次序将按钮组件(也可以是其他组件)从左到右放置在容器中。当到达容器的边界时,组件将放置在下一行中。FlowLayout可以从左对齐、居中对齐、以右对齐的方式排列组件。

注意事项:

1、不限制他所管理的组件的大小,允许他们有最佳大小。

2、当容器被缩放时,组件的位置可能变化,但组件的大小不变。

3、默认组件是居中对齐,可以通过FlowLayout(int align)函数来指定对齐方式。

/*
 * 功能:流式布局案例
 * 
 * */
package com.test;
import java.awt.*;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo3 extends JFrame{
	//定义需要的组件
	JButton jb1,jb2,jb3,jb4,jb5,jb6;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo3 demo3=new Demo3();
	}
	public Demo3() {
		// TODO Auto-generated constructor stub
		//创建组件
		jb1=new JButton("关羽");
		jb2=new JButton("张飞");
		jb3=new JButton("赵云");
		jb4=new JButton("马超");
		jb5=new JButton("黄忠");
		jb6=new JButton("魏延");
		
		//添加组件
		this.add(jb1);
		this.add(jb2);
		this.add(jb3);
		this.add(jb4);
		this.add(jb5);
		this.add(jb6);
		//设置布局管理器
		this.setLayout(new FlowLayout(FlowLayout.LEFT));
//		this.setLayout(null);
		//设置窗体属性
		this.setTitle("蜀国大将---边界布局案例");
		this.setSize(300, 200);
		this.setLocation(300, 300);
		//禁止用户改变窗体大小
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示
		this.setVisible(true);
		
	}

}

网格布局GridLayout:

将容器分割成多行多列组件被分割成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其它的组件,当占满该行的所有网格后,接着继续在下一行从左到右放置组件。

注意事项:

1、组件的相对位置不随容器的缩放而变化,但大小会变化。

2、所有组件的大小相同

3、可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行/列,水平间隙/垂直间隙

参数说明:rows:行数  cols:列数 hgap:垂直间隙 vgap:水平间隙

/*
 * 网格布局
 * */
package com.test;
import java.awt.*;
import javax.swing.*;

public class Demo4 extends JFrame{
//定义组件
	
	int size=9;
	JButton jbs[]=new JButton[size];
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo4 demo4=new Demo4();
	}
	public Demo4() {
		// TODO Auto-generated constructor stub
		for (int i = 0; i < size; i++) {
			jbs[i]=new JButton(String.valueOf(i));
		}
		//设置网格布局
		this.setLayout(new GridLayout(3,3,10,10));
		//添加组件
		for (int i = 0; i < size; i++) {
			this.add(jbs[i]);
		}
		//设置窗体属性
		this.setTitle("网格布局案例");
		this.setSize(300, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setLocation(300, 300);
		this.setVisible(true);
	}

}
开发GUI程序的步骤:

1、继承JFrame

2、定义需要的组件

3、创建组件

4、设置布局管理器

5、添加组件

6、显示窗体


面板组件JPanel

在图形界面编程中,但是比较复杂的布局要求,需要使用布局管理的组合使用。

JPanel:面板组件,非顶层容器

一个界面只可以有一个JFrame窗体组件,但是可以有多个JPanel面板组件,而JPanel上也可以使用FlowLayout、BorderLayout、GridLayout等各种布局管理器,这样可以组合使用达到较为复杂的布局效果。

注意事项:

1、JPanel是JComponent的子类

2、属于容器类组件,可以加入别的组件

3)默认布局管理器是流式布局(FlowLayout)

/*
 * 多种布局管理器的使用
 * */
package com.test;

import java.awt.*;
import javax.swing.*;
public class Demo5 extends JFrame{

	//定义组件
	JPanel jp1,jp2;
	JButton jb1,jb2,jb3,jb4,jb5,jb6;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo5 demo5=new Demo5();
	}
	public Demo5() {
		// TODO Auto-generated constructor stub
		//创建组件
		//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
		jp1.add(jb1);
		jp1.add(jb2);
		jp2.add(jb3);
		jp2.add(jb4);
		jp2.add(jb5);
		//把Panel加入JFrame
		this.add(jp1,BorderLayout.NORTH);
		this.add(jb6,BorderLayout.CENTER);
		this.add(jp2,BorderLayout.SOUTH);
		
		this.setTitle("组合布局");
		this.setSize(300,200);
		this.setLocation(200, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
	}

}

几个常用的组件:

1、文本框(JTextField)

2、密码框(JPasswordField)

3、标签(JLable)

package com.test;

import java.awt.*;
import javax.swing.*;

public class Demo6 extends JFrame{
	//定义组件
	JPanel jp1,jp2,jp3;
	JLabel jlb1,jlb2;
	JButton jb1,jb2;
	JTextField jtf1,jpf1;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo6 demo6=new Demo6();
	}
	public Demo6() {
		// TODO Auto-generated constructor stub
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		
		jlb1=new JLabel("用户名");
		jlb2=new JLabel("密    码");
		jb1=new JButton("登录");
		jb2=new JButton("取消");
		
		jtf1=new JTextField(10);
		jpf1=new JPasswordField(10);
		//设置布局管理
		this.setLayout(new GridLayout(3, 1));
		//加入各个组件
		jp1.add(jlb1);
		jp1.add(jtf1);
		jp2.add(jlb2);
		jp2.add(jpf1);
		
		jp3.add(jb1);
		jp3.add(jb2);
		//加入到JFrame
		this.add(jp1);
		this.add(jp2);
		this.add(jp3);
		
		
		
		this.setTitle("用户登录");
		this.setSize(300,120);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
	}

}

1、复选框组件(JCheckBox)

2、单选框组件(JRadioButton)

特别说明:

同一组单选按钮必须先创建ButtonGroup,然后把单选框组件放入到ButtonGroup。

/*
 * 复选框/单选框组件
 * */
package com.test;
import java.awt.*;
import javax.swing.*;
public class Demo7 extends JFrame{
	//定义组件
	JPanel jp1,jp2,jp3;
	JLabel jl1,jl2,jl3;
	JButton jb1,jb2;
	JCheckBox jcb1,jcb2,jcb3;
	JRadioButton jrb1,jrb2;
	ButtonGroup bg;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo7 demo7=new Demo7();
	}
	public Demo7() {
		// TODO Auto-generated constructor stub
		//创建组件
			jp1=new JPanel();
			jp2=new JPanel();
			jp3=new JPanel();
			jl1=new JLabel("你喜欢的运行");
			jl2=new JLabel("你的性别");
			jb1=new JButton("注册用户");
			jb2=new JButton("取消注册");
		 
			jcb1=new JCheckBox("足球");
			jcb2=new JCheckBox("篮球");
			jcb3=new JCheckBox("网球");
		 
			jrb1=new JRadioButton("男");
			jrb2=new JRadioButton("女");
		 //一定要把jrb1,jrb2放入到一个ButtonGroup
		 
			ButtonGroup bg=new ButtonGroup();
			bg.add(jrb1);
			bg.add(jrb2);
		 //设置布局管理
			this.setLayout(new GridLayout(3, 1));
		 //添加组件
			jp1.add(jl1);
			jp1.add(jcb1);
			jp1.add(jcb2);
			jp1.add(jcb3);
		 
			jp2.add(jl2);
			jp2.add(jrb1);
			jp2.add(jrb2);
		 
			jp3.add(jb1);
			jp3.add(jb2);
			this.add(jp1);
			this.add(jp2);
			this.add(jp3);
		 
			this.setSize(300,300);
			this.setLocation(400,200);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.setVisible(true);
	}
}

下拉框/列表框/滚动窗格

1、下拉框组件(JComboBox)

2、列边框组件(JList)

3、滚动窗格组件(JScrollPane)

特别说明:

列表框组件+滚动窗格组件是结合使用的。目的是为了让列表框中的选项可以有滚动条的支持。

/*
 * JComboBox/JList/JScrollPane
 * 
 * */
package com.test;
import java.awt.*;
import javax.swing.*;

public class Demo8 extends JFrame{
	//定义组件
		JPanel jp1,jp2;
		JLabel jl1,jl2;
		JComboBox jcb;
		JList jList;
		JScrollPane jScrollPane;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo8 demo8=new Demo8();
	}
	public Demo8() {
		// TODO Auto-generated constructor stub
		jp1=new JPanel();
		jp2=new JPanel();
		jl1=new JLabel("您的籍贯是");
		jl2=new JLabel("您喜欢去旅游的地区");
		String []jg={"北京","上海","南京","徐州"};
		jcb=new JComboBox(jg);
		
		String []dd={"九寨沟","故宫","长城","天安门","云龙湖","金山寺","瘦西湖"};
		jList=new JList(dd);
		jScrollPane=new JScrollPane(jList);
		//设置希望显示的选项个数
		jList.setVisibleRowCount(3);
		//设置布局
		this.setLayout(new GridLayout(3,1));
		//添加组件
		jp1.add(jl1);
		jp1.add(jcb);
		
		jp2.add(jl2);
	//	jp2.add(jList);
	
		jp2.add(jScrollPane);
		this.add(jp1);
		this.add(jp2);
		
		this.setTitle("JComboBox/JList/JScrollPane");
		this.setSize(300,300);
		this.setLocation(400, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值