[TOC]
GUI界面开发
1.GUI布局管理器
Java总五大布局管理器:
FlowLayout(流式布局管理器)
- 从左到右的顺序排列,Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中,Frame默认的布局管理器。
代码语言:javascript复制//边界布局勾画出一个集装箱,安排和调整其成分放在五个区域:北,南,东,西,和中心。
public class BorderLayout
extends Object
implements LayoutManager2, Serializable
//静态成员
BorderLayout.NORTH //北部
BorderLayout.SOUTH //南边
BorderLayout.CENTER //中心
BorderLayout.WEST //西部
BorderLayout.EAST //东部
//构造方法
BorderLayout(int hgap, int vgap) //用指定的组件之间的间隙构造一个边框布局。
GridLayout(网格布局管理器)规则的矩阵比如计算器程序中的数字1-9
CardLayout(卡片布局管理器)选项卡
GridBagLayout(网格包布局管理器):非规则的矩阵计算器中的加减;
2.GUI界面显示
描述:利用JAVA的Graphical User Interface(图形用户接口)来进行实现展示GUI界面;
JAVA-Frame类语法:
代码语言:javascript复制java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
//一个 Frame是一个带有标题和边框的顶层窗口。
public class Frame
extends Window
implements MenuContainer
//构造方法
Frame(String title) //构建一个新 Frame最初无形对象的指定标题。
Frame(String title, GraphicsConfiguration gc) //构建了一个新的开始,看不见的 Frame对象和指定的标题和 GraphicsConfiguration。
//常用方法:
setLayout(new 布局管理器);//设置布局管理器
setSize(width,heigh); //设置窗体大小
setLocation(x,y); //设置窗体出现在屏幕的位置
setIconImage(); //设置软件icon图标
setVisible(true); //界面显示
补充知识:
窗口监听:
代码语言:javascript复制// Interface WindowListener :它是一个接口,用于接收窗口事件的侦听器接口
public interface WindowListener extends EventListener
public interface MouseListener extends EventListener
public interface KeyListener extends EventListener
//Frame对象监听器
addWindowListener
addMouseListener
addKeyListener
addActionListener
//适配器
WindowAdapter //用于接收窗口事件的抽象适配器类,在这个类中的方法是空的。此类存在于创建侦听器对象的方便性。
MouseAdapter //鼠标适配器
KeyAdapter //键盘适配器
ActionListener //动作监听
适配器设计模式:
- 在使用监听器的时候, 需要定义一个类事件监听器接口.
- 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写这很繁琐.
- 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.
适配器原理:
- 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了但是方法全是空的.
- 适配器类需要定义成抽象的,因为创建该类对象调用空方法是没有意义的
- 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.
事件处理:
- 事件: 用户的一个操作
- 事件源: 被操作的组件
- 监听器: 一个自定义类的对象, 实现了监听器接口, 包含事件处理方法,把监听器添加在事件源上, 当事件发生的时候虚拟机就会自动调用监听器中的事件处理方法
基础案例:
代码语言:javascript复制package com.weiyigeek.gui;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JOptionPane;
public class Demo1_StartGUI {
public static void main(String[] args) {
//1.JAVA-GUI界面显示设置
Frame f = new Frame("我的第一个Title!");
f.setSize(500, 300); //显示大小
f.setLocation(500, 500); //显示位置
f.setIconImage(Toolkit.getDefaultToolkit().createImage("C:\net.png")); //软件图标
//2.显示按钮
Button button = new Button("测试");
Button bt = new Button("退出");
f.add(bt);
f.add(button);
f.setLayout(new FlowLayout()); //设置流布局管理器
//3.事件源是窗体把监听器注册到事件源上,事件对象传递给监听器(让窗口适配器可以支持)
f.addWindowListener(new WindowAdapter() {
//当然您也可以建立一个类实现WindowsAdapter接口中方法;
//或者采用匿名内部类;
public void windowClosing(WindowEvent e) {
System.exit(0);//退出虚拟机,关闭窗口
}
});
f.addWindowListener(new newWindowListener());
//4.鼠标监听
bt.addMouseListener(new MouseAdapter() {
//单击监听
public void mouseClicked(MouseEvent e) {
System.out.println("单击");
System.exit(0);
}
//释放监听
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("释放");
System.exit(0);
}
});
//5.键盘监听
button.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
System.out.println("您当前输入的值:" e.getKeyCode() "字符值:" e.getKeyChar());
if(e.getKeyCode() == KeyEvent.VK_ENTER) {
System.exit(0);
}
}
});
//6.动作监听
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
f.setVisible(true); //是否可显示
}
}
//实现重写接口中方法
class newWindowListener implements WindowListener {
//软件打开时候显示
@Override
public void windowOpened(WindowEvent e) {
System.out.println(e.paramString());
System.out.println(e.getClass());
}
//软件关闭时候执行
@Override
public void windowClosing(WindowEvent e) {
}
@Override
public void windowClosed(WindowEvent e) {
}
//
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
//软件默认打开以及缩小还原的时候显示执行
@Override
public void windowActivated(WindowEvent e) {
System.out.println("Windows Show");
}
//软件缩小时候触发(弹框)
@Override
public void windowDeactivated(WindowEvent e) {
JOptionPane.showMessageDialog(null, "友情提示");
}
}
WeiyiGeek.
https://blog.csdn.net/NTrinity/article/details/80435990
3.输入框
描述:TextField 允许一个单行文本的编辑。
代码语言:javascript复制//类
public class TextField
extends TextComponent
//构造方法
TextField(String text, int columns) //构造一个与指定要显示的指定文本初始化的新文本字段,并足够大以保持指定的列数。
String getText(String t); // 获取该输入框组件里面的字符串内容
void setText(String t) //将由该文本组件呈现的文本设置为指定的文本。
实际利用:
代码语言:javascript复制TextField tf = new TextField("输入框默认显示数值",15); //预设值文本框以及大小
4.按钮
描述:Button按钮图标相关类
代码语言:javascript复制//类创建一个标记按
public class Button extends Component implements Accessible
//构造方法
Button(String label) //用指定的标签构造一个按钮。
void setLabel(String label) //将按钮的标签设置为指定的字符串。
String getLabel() //获取此按钮的标签。
void addActionListener(ActionListener l) //添加指定的操作侦听器从该按钮接收动作事件。
void removeActionListener(ActionListener l) //移除指定的动作侦听器,以便它不再从该按钮接收动作事件。
实际利用:
代码语言:javascript复制Button bt = new Button("按钮");
5.文本框
描述:一个 TextArea对象是一个多行显示文本区域。它可以设置为允许编辑或是只读的。
代码语言:javascript复制//类定义
public class TextArea
extends TextComponent
//构造方法
TextArea(String text, int rows, int columns, int scrollbars)
使用指定的文本构造一个新的文本区域,并以指定的行、列和滚动条可见性。
//成员变量
SCROLLBARS_HORIZONTAL_ONLY //创建和显示水平滚动条只。
SCROLLBARS_VERTICAL_ONLY //创建和显示垂直滚动条只。
//常用方法
void append(String str) //将给定的文本到文本区的文本。
void insert(String str, int pos) //在该文本区域中的指定位置插入指定的文本。
int getRows/Columns() //返回文本区域中的行/列数。
void replaceRange(String str, int start, int end) //用指定的替换文本替换指定的开始和结束位置之间的文本。
//继承了java.awt.TextComponent中的获取文本
String getText() //返回由该文本组件提交的文本。默认情况下,这是一个空字符串。
void setText(String t) //将由该文本组件呈现的文本设置为指定的文本。(会覆盖原来的)
void setEditable(boolean b) //设置决定这是否是可编辑的文本组件。
void setBackground(Color c) //设置此文本组件的背景颜色。
setFont(Font f) //设置此组件的字体。
实用实例:
代码语言:javascript复制TextArea ta = new TextArea("Hello", 5, 40); //默认显示Hello字符串然后5行10列
ta.getText();
ta.setText("覆盖原来的字符");
ta.append("追加字符串到文本编辑框中");
ta.setEditable(false); //显示的文本框禁止显示
ta.setBackground(new Color(255,255,255)); //显示白色 => 帮助 ctrl shift t
ta.setFont(new Font("xxx",Font.PLAIN,20)); //设置发送字体大小
6.面板
描述:Panel是最简单的容器类,一个面板的默认布局管理器是FlowLayout布局管理器。
代码语言:javascript复制//继承java.awt.Container类其中的方法也将被继承
public class Panel extends Container implements Accessible
//构造方法
Panel(LayoutManager layout) //创建一个新的面板与指定的布局管理器
//方法
setLayout(五大布局); //面板设置布局
实际案例:
代码语言:javascript复制Panel center = new Panel();
center.setLayout(new BorderLayout()); //设置为边界布局管理器
center.add(组件,BorderLayout.SOUTH); //设置组件的位置
7.颜色字体
描述:颜色是Color类而字体是Font类;
Color类用于封装的颜色在默认的sRGB色彩空间或颜色任意颜色空间的 ColorSpace鉴定,并且可以采用alpha指定显示的透明度
代码语言:javascript复制public class Color
extends Object
implements Paint, Serializable
//构造方法
Color(ColorSpace cspace, float[] components, float alpha) //在指定的 ColorSpace在 float阵列和指定的阿尔法指定颜色分量的颜色创建。
Color(int r, int g, int b) //一个指定的红、绿色不透明的sRGB色彩造成的,并在距离蓝值(0 - 255)。
//@ConstructorProperties(value={"red","green","blue","alpha"})
Color(int r, int g, int b, int a) //用指定的红、绿、蓝sRGB色彩创造,并在范围内的α值(0 - 255)。
//成员变量
Color.black //黑色
Color.blue //蓝色
Color.gray //灰色
Color.read //红色
Color.yellow //黄色
//常用方法
int getAlpha() //返回的alpha分量范围在0-255。
int getBlue/Red/Green() 返回默认的sRGB空间范围在0-255的蓝色分量
getColor(String nm, Color v)在系统属性中查找颜色,第一个参数被视为要获得的系统属性的名称。
实际案例:
代码语言:javascript复制new Color(255,255,255) //白色
Font类表示的字体,这是用来在一个可见的方式呈现文本;
代码语言:javascript复制//字体提供所需要的映射字符的顺序序列的字形和渲染在 Graphics和 Component对象符号序列的信息。
public class Font
extends Object
implements Serializable
//构造方法
Font(String name, int style, int size) //创建指定名称的一个新的 Font,样式和大小。
//成员变量
// "PLAIN", "BOLD", "BOLDITALIC",或 "ITALIC"
static int PLAIN //平原型类型
static int BOLD //黑体加粗类型
static int ITALIC //斜体风格
static String MONOSPACED //一个字符串常量的典型姓逻辑字体“等宽”。
static int LAYOUT_LEFT_TO_RIGHT //一个标志layoutglyphvector说明文字是从左到右的比迪烟分析确定。
//成员方法
实际案例:
代码语言:javascript复制TextArea.setFont(new Font("xxx",Font.PLAIN,20)); //设置显示的字体大小
补充知识:
- java平台两种字体之间的区别就是:物理和逻辑字体字体。
- 物理字体包含字形数据和表格图从字符序列符号序列的实际字体库,使用字体技术如TrueType和PostScript Type 1,所有的java平台实现必须支持TrueType字体;其他字体技术支持是依赖于实现的。
- 逻辑字体五字体家族的java平台必须在任何java运行环境支持的定义:衬线、SansSerif、等宽,对话框,和dialoginput,实际上
逻辑字体不是实际的字体库
,逻辑字体名称用java运行环境映射到物理字体;