您的位置:首页 > 产品设计 > UI/UE

java gui

2015-10-01 20:04 489 查看
目标:初步掌握swing组件的使用,指导什么是awt,swing,swt,JFace,掌握常用的布局管理器

GUI:Graphics User Interface

Sun公司已经提供了一个跨平台GUI开发工具包AWT,即抽象窗口工具集(Abstract Window Toolkit),这里面提供了很多类和接口,但是随着发展,出现了本地化的问题,在不同的系统运行界面效果不一样,所以SUN公司又创建了一个新的GUI框架swing,解决了awt存在的lcd问题。相当于awt的一次升级

IBM认为swing比较消耗内存,创建了一个新的GUI库,就是SWT,IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图形包“JFace”。

我们主要学习swing。

快速入门:



【1】JFrame是Frame的子类,属于容器类组件,顶层容器,有一些常用方法

//JFrame是一个顶层容器类,可以添加其它swing组件

JFrame jf = new JFrame();

//给窗体设置标题

jf.setTitle("坦克大战");

//设置大小,按像素计算宽与高,像素是个密度单位,不是长度单位

jf.setSize(300,300);

//显示窗体

jf.setVisible(true);

//设置初始位置

jf.setLocation(100,200);

//关闭窗口,程序结束运行(JVM也退出)

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


【2】JButton是AbstractButton的子类,属于容器类组件,可以加入别的组件,Swing包的按钮组件不只有JButton,还有单选按钮(JRadioButton),箭头按钮(BasicArrowButton),触发器按钮(JToggleButton)...

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

import javax.swing.plaf.basic.BasicArrowButton;

public class Demo8_1 extends JFrame{

JButton jb1 = null;

public static void main(String[] args) {

Demo8_1 demo8_1 = new Demo8_1();

}

public Demo8_1() {

//JFrame是一个顶层容器类,可以添加其它swing组件

JButton jb1 = new JButton("确认");

BasicArrowButton bab = new BasicArrowButton(1);

//给窗体设置标题

this.setTitle("坦克大战");

//设置大小,按像素计算宽与高,像素是个密度单位,不是长度单位

this.setSize(300,300);

//显示窗体

this.setVisible(true);

//设置初始位置

this.setLocation(100,200);

//关闭窗口,程序结束运行(JVM也退出)

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//添加按钮

this.add(bab);

}

}


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

种类:流式布局管理器(FlowLayout),边界布局管理器(BorderLayout),网格布局管理器(GridLayout),卡片布局管理器(GardLayout),网格包布局管理器(GridBagLayout),前三种是最常见的布局管理器

(1)BorderLayout将容器简单的划分为东南西北中5个区域,中间区域最大。这是JFrame窗体,JDialog对话框组件默认布局方法


/**

* BorderLayout案例

* 1.集成JFrame 2.定义需要的各个组件 3.在构造函数中创建组件

* 4.添加组件 5.对窗体进行设置

*/

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_2 extends JFrame{

//定义组件

JButton jb1,jb2,jb3,jb4,jb5;

public Demo8_2() {

//创建组件

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.setLocation(100,200);

this.setTitle("边界布局案例");

this.setSize(300,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public static void main(String[] args) {

Demo8_2 demo8_2 = new Demo8_2();

}

}


不是五个部分必须添加,中部组件会自动调节大小

(2)流式布局FlowLayout

它不限制它所管理的组件大小,允许他们有最佳大小。当容器被缩放时,组件的位置可能变化,但是组件的大小不会变化。默认组件采用居中对齐方式,可以通过FlowLayout(int align)函数来改变,还可以禁止用户改变窗体大小 setResizable(false);

/**

* 功能:流式布局案例

*/

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_3 extends JFrame{

JButton jb1,jb2,jb3,jb4,jb5,jb6;

public Demo8_3() {

jb1 = new JButton("关羽");

jb2 = new JButton("张飞");

jb3 = new JButton("赵云");

jb4 = new JButton("马超");

jb5 = new JButton("黄忠");

jb6 = new JButton("魏延");

//设置布局管理器

this.setLayout(new FlowLayout(FlowLayout.LEFT));//默认居中对齐

this.add(jb1);

this.add(jb2);

this.add(jb3);

this.add(jb4);

this.add(jb5);

this.add(jb6);

this.setTitle("流式布局案例");

this.setSize(300,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocation(0,0);

this.setVisible(true);

this.setResizable(false);//禁止用户改变窗体大小

}

public static void main(String[] args) {

Demo8_3 demo8_3 = new Demo8_3();

}

}


(3)网格布局GridLayout

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

组件的相对位置不随容器的缩放而变化,但大小会变化,所有组件的大小相同

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

(4)组合使用创建较为复杂的界面————————JPanel

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

/**

* 功能:多种布局管理器的使用

*/

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_6 extends JFrame{

JPanel jp1,jp2;

JButton jb1,jb2,jb3,jb4,jb5,jb6;

public static void main(String[] args) {

Demo8_6 demo8_6 = new Demo8_6();

}

public Demo8_6() {

jp1 = new JPanel();

jp2 = new JPanel();

jb1 = new JButton("西瓜");

jb2 = new JButton("苹果");

jb3 = new JButton("荔枝");

jb4 = new JButton("葡萄");

jb5 = new JButton("桔子");

jb6 = new JButton("香蕉");

jp1.add(jb1);

jp1.add(jb2);

jp2.add(jb3);

jp2.add(jb4);

jp2.add(jb5);

this.add(jp1,BorderLayout.NORTH);

this.add(jp2,BorderLayout.SOUTH);

this.add(jb6,BorderLayout.CENTER);

this.setTitle("布局综合案例");

this.setSize(200,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocation(200,200);

this.setVisible(true);

}

}


(5)其它的一些常用控件:

例如文本框:JTextField

密码框:JPasswordField

标签: JLabel

/**

* 功能:常用控件

*/

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_7 extends JFrame{

JPanel jp1,jp2,jp3;

JLabel jl1,jl2;

JTextField jtf;

JPasswordField jpf;

JButton jb1,jb2;

public Demo8_7() {

jp1 = new JPanel();

jp2 = new JPanel();

jp3 = new JPanel();

jl1 = new JLabel("用户名");

jl2 = new JLabel("密 码");

jb1 = new JButton("确定");

jb2 = new JButton("取消");

jtf = new JTextField(10);//10为宽度

jpf = new JPasswordField(10);

this.setLayout(new GridLayout(3,1));

this.add(jp1);

this.add(jp2);

this.add(jp3);

jp1.add(jl1);jp1.add(jtf);

jp2.add(jl2);jp2.add(jpf);

jp3.add(jb1);jp3.add(jb2);

this.setTitle("常用控件");

this.setSize(200,200);

this.setLocation(200,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

public static void main(String[] args) {

Demo8_7 demo8_7 = new Demo8_7();

}

}


再比如:单选框JRadioButton 复选框JCheckBox

同一组单选按钮必须先创建ButtonGroup,然后把单选框组件放入到ButtonGroup中,但是在JPanel中添加控件时并不是添加ButtonGroup,而还是一个个添加JRadioButton

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_8 extends JFrame{

JPanel jp1,jp2,jp3;

JLabel jl1,jl2;

ButtonGroup bg;

JRadioButton jrb1,jrb2;

JCheckBox jcb1,jcb2,jcb3;

JButton jb1,jb2;

public static void main(String[] args) {

Demo8_8 demo8_8 = new Demo8_8();

}

public Demo8_8() {

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("女");

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,150);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}







以上基本实现了简单的登录和注册界面,我们常常还用到用户调查界面,如下图:这个时候我们就会用到:

下拉框组件(JComboBox),列表框组件(JList),滚动窗格组件(JScrollPane)

一般来说,列表框组件+滚动窗格组件是结合使用的,目的是让列表框中的选项可以有滚动条支持

package com.zjz.gui;

import java.awt.*;

import javax.swing.*;

public class Demo8_9 extends JFrame{

JPanel jp1,jp2;

JLabel jl1,jl2;

JComboBox jcb1;

JList jlist;

JScrollPane jsp;

public static void main(String[] args) {

Demo8_9 demo8_9 = new Demo8_9();

}

public Demo8_9() {

jp1 = new JPanel();

jp2 = new JPanel();

jl1 = new JLabel("你的籍贯");

jl2 = new JLabel("旅游地点");

String[] jg = {"北京","上海","天津","重庆"};

jcb1 = new JComboBox(jg);

String[] dd = {"九寨沟","故宫","长城","天安门"};

jlist = new JList(dd);

jlist.setVisibleRowCount(2);

jsp = new JScrollPane(jlist);

this.setLayout(new GridLayout(2,1));

jp1.add(jl1);

jp1.add(jcb1);

jp2.add(jl2);

jp2.add(jsp);

this.add(jp1);this.add(jp2);

this.setSize(300,300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: