[TOC]

GUI界面开发

1.GUI布局管理器

Java总五大布局管理器:

  • FlowLayout(流式布局管理器)
    • 从左到右的顺序排列,Panel默认的布局管理器。
  • BorderLayout(边界布局管理器)

    • 东,南,西,北,中,Frame默认的布局管理器。
      //边界布局勾画出一个集装箱,安排和调整其成分放在五个区域:北,南,东,西,和中心。
      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类语法:

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); //界面显示


补充知识:

  • 窗口监听:
    // 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 //动作监听


适配器设计模式:

  • 在使用监听器的时候, 需要定义一个类事件监听器接口.
  • 通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写这很繁琐.
  • 适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可.

适配器原理:

  • 适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了但是方法全是空的.
  • 适配器类需要定义成抽象的,因为创建该类对象调用空方法是没有意义的
  • 目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了.


事件处理:

  • 事件: 用户的一个操作
  • 事件源: 被操作的组件
  • 监听器: 一个自定义类的对象, 实现了监听器接口, 包含事件处理方法,把监听器添加在事件源上, 当事件发生的时候虚拟机就会自动调用监听器中的事件处理方法

基础案例:

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 {
4public static void main(String[] args) {
44//1.JAVA-GUI界面显示设置
44Frame f = new Frame("我的第一个Title!");
44f.setSize(500, 300); //显示大小
44f.setLocation(500, 500); //显示位置
44f.setIconImage(Toolkit.getDefaultToolkit().createImage("C:\\net.png")); //软件图标
44//2.显示按钮
44Button button = new Button("测试");
44Button bt = new Button("退出");
44f.add(bt);
44f.add(button);
44f.setLayout(new FlowLayout()); //设置流布局管理器
44//3.事件源是窗体把监听器注册到事件源上,事件对象传递给监听器(让窗口适配器可以支持)
44f.addWindowListener(new WindowAdapter() {
4444//当然您也可以建立一个类实现WindowsAdapter接口中方法;
4444//或者采用匿名内部类;
44 public void windowClosing(WindowEvent e) {
44 System.exit(0);//退出虚拟机,关闭窗口
44 }
44});
44f.addWindowListener(new newWindowListener());
44
44//4.鼠标监听
44bt.addMouseListener(new MouseAdapter() {
444//单击监听
444public void mouseClicked(MouseEvent e) {
4444System.out.println("单击");
4444System.exit(0);
444}
444//释放监听
444@Override
444public void mouseReleased(MouseEvent e) {
4444System.out.println("释放");
4444System.exit(0);
444}
44});

44//5.键盘监听
44button.addKeyListener(new KeyAdapter() {
444@Override
444public void keyReleased(KeyEvent e) {
4444System.out.println("您当前输入的值:" + e.getKeyCode() + "字符值:" + e.getKeyChar());
4444if(e.getKeyCode() == KeyEvent.VK_ENTER) {
44444System.exit(0);
4444}
444}
44});
44
44//6.动作监听
44button.addActionListener(new ActionListener() {
444@Override
444public void actionPerformed(ActionEvent e) {
4444System.exit(0);
444}
44});
44
44f.setVisible(true); //是否可显示
4}
}

//实现重写接口中方法
class newWindowListener implements WindowListener {
4//软件打开时候显示
4@Override
4public void windowOpened(WindowEvent e) {
44System.out.println(e.paramString());
44System.out.println(e.getClass());
4}

//软件关闭时候执行
4@Override
4public void windowClosing(WindowEvent e) {
4}
4@Override
4public void windowClosed(WindowEvent e) {
}

//
4@Override
4public void windowIconified(WindowEvent e) {
4}
4@Override
4public void windowDeiconified(WindowEvent e) {
4}
4//软件默认打开以及缩小还原的时候显示执行
4@Override
4public void windowActivated(WindowEvent e) {
44System.out.println("Windows Show");
4}
4
4//软件缩小时候触发(弹框)
4@Override
4public void windowDeactivated(WindowEvent e) {
4 JOptionPane.showMessageDialog(null, "友情提示");
4}
}

WeiyiGeek.

https://blog.csdn.net/NTrinity/article/details/80435990


3.输入框

描述:TextField 允许一个单行文本的编辑。

//类
public class TextField
extends TextComponent

//构造方法
TextField(String text, int columns) //构造一个与指定要显示的指定文本初始化的新文本字段,并足够大以保持指定的列数。
String getText(String t); // 获取该输入框组件里面的字符串内容
void setText(String t) //将由该文本组件呈现的文本设置为指定的文本。

实际利用:

TextField tf = new TextField("输入框默认显示数值",15);  //预设值文本框以及大小


4.按钮

描述:Button按钮图标相关类

//类创建一个标记按
public class Button extends Component implements Accessible

//构造方法
Button(String label) //用指定的标签构造一个按钮。

void setLabel(String label) //将按钮的标签设置为指定的字符串。
String getLabel() //获取此按钮的标签。
void addActionListener(ActionListener l) //添加指定的操作侦听器从该按钮接收动作事件。
void removeActionListener(ActionListener l) //移除指定的动作侦听器,以便它不再从该按钮接收动作事件。

实际利用:

Button bt = new Button("按钮");


5.文本框

描述:一个 TextArea对象是一个多行显示文本区域。它可以设置为允许编辑或是只读的。

//类定义
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) //设置此组件的字体。

实用实例:

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布局管理器。

//继承java.awt.Container类其中的方法也将被继承
public class Panel extends Container implements Accessible

//构造方法
Panel(LayoutManager layout) //创建一个新的面板与指定的布局管理器

//方法
setLayout(五大布局); //面板设置布局

实际案例:

Panel center = new Panel();
center.setLayout(new BorderLayout()); //设置为边界布局管理器
center.add(组件,BorderLayout.SOUTH); //设置组件的位置


7.颜色字体

描述:颜色是Color类而字体是Font类;

  • Color类用于封装的颜色在默认的sRGB色彩空间或颜色任意颜色空间的 ColorSpace鉴定,并且可以采用alpha指定显示的透明度
    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)在系统属性中查找颜色,第一个参数被视为要获得的系统属性的名称。

实际案例:

new Color(255,255,255)  //白色


  • Font类表示的字体,这是用来在一个可见的方式呈现文本;
    //字体提供所需要的映射字符的顺序序列的字形和渲染在 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说明文字是从左到右的比迪烟分析确定。

    //成员方法

实际案例:

TextArea.setFont(new Font("xxx",Font.PLAIN,20)); //设置显示的字体大小

补充知识:

  • java平台两种字体之间的区别就是:物理和逻辑字体字体。
    • 物理字体包含字形数据和表格图从字符序列符号序列的实际字体库,使用字体技术如TrueType和PostScript Type 1,所有的java平台实现必须支持TrueType字体;其他字体技术支持是依赖于实现的。
    • 逻辑字体五字体家族的java平台必须在任何java运行环境支持的定义:衬线、SansSerif、等宽,对话框,和dialoginput,实际上逻辑字体不是实际的字体库,逻辑字体名称用java运行环境映射到物理字体;