JAVA入门学习十二

2022-09-28 17:44:32 浏览数 (1)

[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运行环境映射到物理字体;

0 人点赞