Java第十八章课堂总结

Swing程序设计

Swing用于开发桌面窗体程序用于JDK的第二代GUI框架,其功能比JDK第一代GUI框架AWT更为强大,性能更加优良。但因为Swing技术推出时间太早,七性能,开发效率等不及一些其他的留下技术,所以目前市场大多数桌面窗体都不是由java开发的,Swing技术也书简被广大开发人员放弃了

        不过Swing是JDK自带的功能,并且能非常好的体现出java语言在面对对象,接口时间等方面设计模式,又能提供直观的呈现运行效果,有所以本书还能纳入此内容,本章不能深入的讲解Swing技术,仅会介绍一些常用组件的使用方法

        Swing中大多数数组件均为轻量级组件,使用Swing开发出的窗体风格与当前平台(如WindowsLinux等)的窗体风格保持一致

JFrame jf =new JFrame("登入系统");
Container container = jf.getContenPane();

在创建窗体后,先调用getContentPane()方法将窗体转换为容器,再使用add()方法或者remove()方法想容器中添加组件或者删除容器中的组件,向容器中添加按钮

JButton okBtn = new JButton("确定");
container.add(okBth);//添加按钮
container.remove(okBth);//删除容器中的按钮

创建窗体后,要对窗体惊醒设置  设置大小 位置,是否可见等等

setBounds(int x,int y,int width,int leight)
//设置窗体左上角在屏幕中的坐标(x,y),窗体的宽度为widttth,窗体的高度为height。
setLocation(int x,int y);//设置窗体左上角在屏幕中的坐标为(x,y)
setSize(int width,int heigth);设置窗体的宽度为width,高度为height
setVisibale(boolean b);//设置窗体是否可见。b为true时窗体为可见;b为false时窗体为不可见
setDefaultCloseOperation(int operation);
//设置窗体的关闭方式,默认值为DISPOSE_ON_CLOSE  Java语言提供了多种窗体的关闭方式

import java.awt.Container;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
 
public class jFreamTest {
 
	public static void main(String[] args) {
		JFrame jf = new JFrame();//创建一个窗口对象
		jf.setTitle("创建一个JFrame 窗体");//设置窗口标题
		Container container = jf.getContentPane();//获取主容器
		JLabel jl = new JLabel("这是一个JFrame 窗体");//一个文本标签
		jl.setHorizontalAlignment(SwingConstants.CENTER);//将标签上的文字居中
		container.add(jl);//将标签添加到著容器中
		jf.setSize(300,150);//设置窗体宽高
		jf.setLocation(320,240);//设置窗体在屏幕中出现的位置
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		jf.setVisible(true);//让窗体展示出来
	}
}

Java第十八章课堂总结_第1张图片

JDialog对话框

 JDialong对话框继承了java.awt.Dialog类,其功能是从一个窗体弹出另一个窗体,如使用IE浏览器时弹出的确定对话框JDialog对话框与JFrame窗体类似,被使用也需要先调用getContentPane()方法Jdialog对话捐给转换为容器再对JDialog对话框进行设置

public  JDialong();创建一个没有标题和父窗体的对话框
public  JDialong(Frame f);//创建一个没有标题的,但有父窗体的对话框
public  JDialong(Frame f ,boolean model);//创建一个没有标题但指定
父窗体和模式的对话框 如果model为true,那么弹出对话框后,用户无法操作父窗体
public  JDialong(Frame f ,String title);
//创建一个指定标题和父窗体的对话框 
public  JDialong(Frame f ,boolean model);//创建一个指定标题  父窗体和模式的对话框

在弹窗中弹出对话框:

 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
 
class MyJDialog extends JDialog{//自定义对话框类  继承了JDialog
	public MyJDialog(MyFrame frame) {
		//调用父类构造方法,第一个参数是父窗体,第二个参数是窗体标题  //第三个参数是表示阻塞父窗体
		super(frame,"第一个JDialog窗体",true);
		Container container=getContentPane();//获取主容器
		container.add(new JLabel("这是一个对话框"));//在容器中添加标签
		setBounds(120,120,100,100);//设置对话框在桌面先是的坐标和大小
	}
}
public class MyFrame extends JFrame {//自定义窗体类  继承JFrame
	public MyFrame() {//窗体的构造方法
		Container container=getContentPane();//获得窗体的构造方法
		container.setLayout(null);//容器使用绝对布局
		JButton bl=new JButton("弹出对话框");//创建一个按钮
		bl.setBounds(10,10,100,21);//定义按钮在容器中的坐标和大小
		bl.addActionListener(new ActionListener() {//为按钮添加单击事件
			public void actionPerformed(ActionEvent e) {//单机事件的触发方法
				MyJDialog dialog=new MyJDialog(MyFrame.this);//创建MYJDialo对话框
				dialog.setVisible(true);//使对话框可见
			}
		});
		container.add(bl);//将按钮添加到容器中
		setSize(200,200);//窗体的宽高
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//使窗体可见
		;}
		public static void main(String[] args){
			new MyFrame();
		}
	}

JOptionPane小型对话框

一个非常便捷的小型对话框,该类用于创建对话框的方法都是静态方法,无需创建对象即可弹出,在日常开发中经常使用该类唐初提示确认用户需求 

自定义对话框:

public static int showOptionDialog( Component parentComponent
	Oject message;
	String title;
	int optionType;
	int messageType;
	lcon icon; 
	Object[] options;
	Object initialValue)
}

parentComponent:知名对话框在哪个窗体上显示,如果传入就提的窗体对象和,
对话框会在该窗体居中位置先是  如果传入的是null则会在屏幕中间弹出对话框
message:提示信息
title:对话框的标题
optionType:指定可用对话框的选项的整数
messageType:指定消息种类的整数,主要确定来字可插入外观的图标
options:只是用户可能选择的对象组成的数组。如果对象是组件,则可以正确的呈现,非String对象使用toString方法呈现,如果此参数为null,则由外观确定选项
initiaIValueL表示对话框默认的对象只用options时才有意义,可以为null

弹出会话框:

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
 
public class Demo {
 
	public static void main(String[] args) {
		Object o[]= {new JButton("是的"),new JButton("再想想")};//按钮对象的Object数组
		Icon icon = new ImageIcon("src/注意.png");//获取图标对象
		JOptionPane.showOptionDialog(null,
				"你准备好了吗?",
				"注意了!",
				JOptionPane.DEFAULT_OPTION,
				JOptionPane.DEFAULT_OPTION,
				icon,o,null);
	}
 
}

确认框:

import javax.swing.JOptionPane;
 
public class Demo1 {
 
	public static void main(String[] args) {
		int answer=JOptionPane.showConfirmDialog
(null, "确定离开吗?","标题",JOptionPane.YES_NO_OPTION);
		//18.4
			}
 
	}

输入框:

import javax.swing.JOptionPane;
 
public class Demo3 {
 
	public static void main(String[] args) {
		String name=JOptionPane.showInputDialog(null,"请输入您的姓名");
 
	}
 
}

警告对话框:

import javax.swing.JOptionPane;
 
public class Demo2 {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JOptionPane.showConfirmDialog(null,
				"您与服务器断开了链接",
				"发生错误",
				JOptionPane.ERROR_MESSAGE);
	}
	}

null绝对布局

绝对布局也叫做null布局,其特点是影星质地的那个组件在容器中的位置和大小,组件的位置是通过绝对坐标的方式来制定的,使用绝对布局首先要Container.setLayout(null)方法取消容器中的布局管理器,然后再用Componnent,setBounds(int x,int y ,int width ,int height)方法来设置每个组件在容器中的位置和大小

import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
 
public class AbsoulutePosition extends  JFrame{
	public AbsoulutePosition() {
		setTitle("本窗体使用绝对布局");//窗体标签
		setLayout(null);//使用null布局  绝对布局
		setBounds(0,0,300,150);//设置窗体的坐标与宽高
		Container c =getContentPane();//获取主容器
		JButton b1 =new JButton("按钮1");//创建按钮1
		JButton b2 =new JButton("按钮2");//创建按钮2
		b1.setBounds(10,30,80,30);//这是按钮1的位置和大小
		b2.setBounds(60,70,100,20);//设置按钮2 的位置和大小
		c.add(b1);//向容器内添加按钮1
		c.add(b2);//向容器内添加按钮2
		setVisible(true);//使窗体可见
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		
	}
	public static void main(String[]args) {
		new AbsoulutePosition();
	}
}

FlowLayout流布局管理器

流布局(FlowLayout)管理器是Swing种最基本的布局管理器。使用流布局管理器拜访组件,组件时被从左到右拜访。当组件占据了当前的所有弓箭是 ,溢出的组件会被移动到当前行的下一行,默认情况下,行组建的排列方式被指定为剧中对其,但是通过设置可以更改没有行组建的排序方式

public FlowLayout()
public FlowLayout(int alignment)
public FlowLayout(int alignment,interestinghorizGap,int vertGap)
构造方法种alignment参数表示使用流布局管理器是每一行组建的排列方式,
该参数可以被赋予FlowLayout.LEFT,flowLayout.CENTER或Flow Layout。RIGHT

Java第十八章课堂总结_第2张图片

在public FlowLayout(int alignnment,int horizGap,int vertGap)还存在horizGap和vertGap两个参数,这两个参数分别以像素为单位指定组件与组件之间的水平间隔和垂直间隔

import java.awt.Container;
import java.awt.FlowLayout;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
 
public class FlowLayoutPosition extends JFrame{
	public FlowLayoutPosition() {
		setTitle("本窗体使用流布局管理器");//设置窗体标签
		Container c =getContentPane();
		//窗体使用流布局  组件右对齐,组件之间的水平间隔为10像素,垂直间隔为10像素
		setLayout(new FlowLayout(FlowLayout.RIGHT,10,10));
		for(int i=0;i<10;i++) {//在容器中循环添加10按钮
			c.add(new JButton("button"+i));
		}
		setSize(300,200);//设置窗体大小
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//使窗体可见
	}
	public static void main(String[] args) {
			new FlowLayoutPosition();
	}
 
}

BorderLayout边界布局管理器 

使用Swing创建窗体后,容器默认的布局管理器是边界布局(BorderLayout)管理器,边界布局管理把容器规划为东西南北中五个区域使用方法如下

import java.awt.BorderLayout;
import java.awt.Container;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
 
public class BorderLayoutPosition extends JFrame {
	public BorderLayoutPosition() {
	setTitle("这个窗体使用边界布局管理器");//获取主容器
	Container c = getContentPane();//容器使用边界布局
	setLayout(new BorderLayout());
	JButton centerBtn = new JButton("中");
	JButton northBth = new JButton("北");
	JButton southBut = new JButton("南");
	JButton westBtn = new JButton("西");
	JButton eastBth = new JButton("东");
	c.add(centerBtn,BorderLayout.CENTER);//中部添加按钮
	c.add(northBth,BorderLayout.NORTH);//北部添加按钮
	c.add(southBut,BorderLayout.SOUTH);//南部添加按钮
	c.add(westBtn,BorderLayout.WEST);//西部添加按钮
	c.add(eastBth,BorderLayout.EAST);//东部添加按钮
	setSize(350,200);//设置窗体大小
	setVisible(true);//设置可见
	setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//关闭窗体则定制程序
}
public static void main(String[] args) {
	new BorderLayoutPosition();
}
}

GridLayout网络布局管理器

网络布局管理器(GridLayout)管理器能够把容器划分为网格,组件课按行列进行决定,在网格的大小都相同,例如  一个两行两列的网格布局管理器能够产生4个大小相同的网格,组件从网格的左上角开始按照从左到右,从上到下的顺序来添加到网格中,且每个组件都会被填满整个网格,改变窗体大小时,组件大小也会随之改变 

import java.awt.*;
import javax.swing.*;
 
public class GridLayoutPositon extends JFrame{
	public GridLayoutPositon() {
		Container c=getContentPane();
		setLayout(new GridLayout(7,3,5,5));
		//设置容器使用网格布局管理器,设置7行3列的网格,组件件水平间距为5像素,垂直间距为5像素
		for(int i=0;i<20;i++) {//循环添加按钮
			c.add(new JButton("button"+i));
		}
		setTitle("这是一个使用网格布局管理器的窗体");
		setSize(300,300);//窗体大小
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
		setVisible(true);//设为可见
		
	}
	public static void main(String[] args) {
		new GridLayoutPositon();
	}
 
}

常用面板

在Swing程序设计中  面板是一个容器,被用于容纳其他组件但是面板必须添加到其他容器中Swing中常用的面板包括了JPanel面板和JScrollPane面板

JPanel面板

JPanel面板继承了java.awt.Container类JPanel面板必须在窗体容器中使用,无法脱离窗体显示

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
 
public class JPanelTest extends JFrame{
	public JPanelTest() {
		Container c =getContentPane();
		//将整个容器设置为2行2列的网格布局,组件水平间距隔10像素,垂直间距为10px;
		c.setLayout(new GridLayout(2,2,10,10));
		//初始化一个面板,此面板使用1行4列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p1 =new JPanel (new GridLayout(1,4,10,10));
		//初始化一个面板  此面板使用边界布局
		JPanel p2 =new JPanel (new BorderLayout());
		//初始化一个面板,此面板使用1行2列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p3 =new JPanel (new GridLayout(1,2,10,10));
		//初始化一个面板,此面板使用2行1列的网格布局组件水平间隔10px  垂直间隔为10px
		JPanel p4 =new JPanel (new GridLayout(2,1,10,10));
		//给每个面板都添加边框和标题,使用BorderFactory工厂类生成带标题边框的对象
		p1.setBorder(BorderFactory.createTitledBorder("面板1"));
		p2.setBorder(BorderFactory.createTitledBorder("面板2"));
		p3.setBorder(BorderFactory.createTitledBorder("面板3"));
		p4.setBorder(BorderFactory.createTitledBorder("面板4"));
		//向面板1中添加按钮
		p1.add(new JButton("b1"));
		p2.add(new JButton("b1"));
		p3.add(new JButton("b1"));
		p4.add(new JButton("b1"));
		//向面板2中添加按钮
		p2.add(new JButton("b2"),BorderLayout.WEST);
		p2.add(new JButton("b2"),BorderLayout.EAST);
		p2.add(new JButton("b2"),BorderLayout.NORTH);
		p2.add(new JButton("b2"),BorderLayout.SOUTH);
		p2.add(new JButton("b2"),BorderLayout.CENTER);
		//向面板3中添加按钮
		p3.add(new JButton("b3"));
		p3.add(new JButton("b3"));
		//向面板4中添加按钮
		p4.add(new JButton("b4"));
		p4.add(new JButton("b4"));
		//向容器中添加面板
		c.add(p1);
		c.add(p2);
		c.add(p3);
		c.add(p4);
		setTitle("在这个窗体中使用面板");
		setSize(500,300);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
	}
	public static void main(String[] args) {
		JPanelTest test = new JPanelTest();
		test.setVisible(true);
	}
 
}

JScrollPane滚动面板

JScrollPane面板时带动滚动条的面板,是被用于在较小的窗体中先是较大的篇幅内容,需要注意JScrollPane滚动面板不能使用布局管理器,且只能容纳一个组件。如果需要向JScrollPane面板中添加多个组件,那么需要先将多个逐渐添加到JPanel面板,在将JPanel面板添加到滚动面板

import java.awt.Container;
 
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
 
public class JScrollPaneTest  extends JFrame {
	public JScrollPaneTest(){
		Container c =getContentPane();//获取主容器
			//创建一个文本域组件  文本域默认大小为20行50列
		JTextArea ta = new JTextArea(20,50);
		//创建一个JScrollPane滚动面板,并将文本域放到滚动面板中
		JScrollPane sp = new JScrollPane(ta);
		c.add(sp);//将该面板添加到竹筒其中
		setTitle("带有滚动条的文字编辑器");
		setSize(400,200);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
	}
	public static void main(String[] args) {
		JScrollPaneTest test =new JScrollPaneTest();
		test.setVisible(true);
 
	}
 
}

文字标签组件与图标

在Swing程序设计中,标签(JLabel)被用于先是文本,图标等内容,在Swing应用程序中用户界面中,用户能通过标签上的文本,图标等内容获得相应的提示信息

JLabel标签

baioqain (JLabel)的弗雷什JCompont类,虽然标签不能被添加监听器,但是标签显示的文本图标内容可以被知道那个对齐方式

        通过JLabel类的构造方法们可以创建多种标签,如显示只有文本的标签,只有图标的标签以及同时包含文本和图标的标签等

public JLabel();//创建一个不带图标和文本的标签
public JLabel(Icon icon);//创建一个带图标的标签
public JLabel(Icon icon ,int aligment);创建以恶给带图标的标签,并设置图标的水平对齐方式
public JLabel(String text,int aligment);//创建一个带文本标签,并设置文本的水平对齐方式
public JLabel(Icon icon ,String text, int aligment);
//创建一个带文本和图标的JLabel对于宣布发,并设置文本和图标的水平对齐方式

import java.awt.Container;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
 
public class jFreamTest {
 
    public static void main(String[] args) {
        JFrame jf = new JFrame();//创建一个窗口对象
        jf.setTitle("创建一个JFrame 窗体");//设置窗口标题
        Container container = jf.getContentPane();//获取主容器
        JLabel jl = new JLabel("这是一个JFrame 窗体");//一个文本标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);//将标签上的文字居中
        container.add(jl);//将标签添加到著容器中
        jf.setSize(300,150);//设置窗体宽高
        jf.setLocation(320,240);//设置窗体在屏幕中出现的位置
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗体则停止程序
        jf.setVisible(true);//让窗体展示出来
    }
}

你可能感兴趣的:(java,开发语言)