zoukankan      html  css  js  c++  java
  • java GUI 快速入门

    java 中编写 GUI 有两中工具包,分别为 AWT、Swing。
    Swing 是 AWT 的拓展,Swing 具有比 AWT 丰富的组件和方法。
    AWT 和 Swing 都能跨平台使用;AWT 会随着不同的系统平台,UI 样式会有所变化,Swing 则不会,设计完毕后在所有平台下样式一致。

    import java.awt.*;
    import javax.swing.*;
    

    一个 awt 示例

    下面是一个窗口示例

    import java.awt.*;
    public class MyFrame extends Frame {
        public  MyFrame(){
            super("测试");
            setSize(400,200);
            setVisible(true);
        }
        public  static  void Main(String args[]){
            new MyFrame();
        }
    }
    

    file
    创建一个窗口,要继承 Frame,同时会继承 Frame 中的一些方法;
    Frame 中:

    • super 方法可以设置窗口标题;
    • setSize 设置窗口大小,(width,hight)
    • setVisible 设置是否显示窗口,true 显示,false 隐藏

    setLayout(new FlowLayout());用于设置窗口布局;
    add(组件); 用于向窗口添加组件,例如按钮等。

    我们来向窗口添加组件

    import java.awt.*;
    public class MyFrame extends Frame {
        public  MyFrame(){
            super("测试");
    
            setLayout(new FlowLayout());
    
            Button btn=new Button("Button");
            Font f=new Font("宋体",Font.BOLD,28);
            btn.setFont(f);
            add(btn);
    
            setSize(400,200);
            setVisible(true);
        }
    

    在 main 方法中启动窗口

        public  static  void main(String args[]){
            new MyFrame();
        }
    

    效果
    file

    事件

    java 中,事件分为三个方面描述,
    事件源:发生事件的对象
    事件处理:委托事件处理模型
    事件监听者:负责处理事件

    首先B监听A,设置监听的内容,并设置响应内容。
    一旦A本身的状态改变,就触发C;
    C执行D

    妈妈跟儿子说,你作业做完了,妈妈就让爸爸就给你削个苹果吃。
    妈妈:事件监控者
    儿子:事件源
    动作:做完作业
    事件:爸爸削个苹果给儿子

    妈妈监控儿子,监控是否完成作业。设置作业完成后,触发事件:削苹果;
    儿子做完作业,状态变更,触发事件;事件开始执行。

    简单来说 B 告诉 A ,如果 A 怎么样了,就去做一件事情C。

    实现事件流程

    我们继续利用上面的窗口,实现按钮点击时,改变窗口背景颜色。

    实现一个事件

    引入

    import java.awt.event.ActionListener;
    

    实现接口

    class  Test implements  ActionListener{   
        public void actionPerformed(ActionEvent actionEvent) {
            System.out.println("执行工作");
        }
    

    将事件注册到控件上

    package com.company;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class MyFrame extends Frame implements ActionListener {
        public  MyFrame(){
            super("测试");
    
            setLayout(new FlowLayout());
    
            Button btn=new Button("Button");
            Font f=new Font("宋体",Font.BOLD,28);
            btn.setFont(f);
            btn.addActionListener(this::actionPerformed);
            add(btn);
            setSize(400,200);
            setVisible(true);
        }
    
        public void actionPerformed(ActionEvent actionEvent) {
            System.out.println("执行工作");
            setBackground(Color.BLUE);
        }
    }
    

    按钮有个事件监听器 addActionListener,我们将要执行的工作 actionPerformed 绑定进去。
    当条件发生时,就会触发此工作。

    妈耶,我都不知道自己在说啥了。
    C# 中,事件没有那么麻烦,也不需要这么BB。。。

    另外, actionEvent ,有两个常用方法

            actionEvent.getActionCommand();		// 获取对象名称
            actionEvent.getSource()();			// 获取源对象
    

    布局

    AWT 中,主要有 6 中布局方式。

    • FlowLayout 流式布局
      默认布局,控件从上到下,从左到右地排序。
    • BorderLayout 边缘布局
      自动停靠窗体边缘,并且长宽随着窗体的变化。
      file
    • GridLayout 网格布局
      将容器分成若干行和若干列。
    • CradLayout 卡片布局
      像扑克牌一样,每张牌是一个控件,多个控件叠加起来,每次只能查看一个。
    • GridBagLayout 网格块布局
    • null 采用坐标定位布局

    创建一个窗体,并设置流式布局

    public class MyFrame extends Frame {
        public  MyFrame(){
            super("测试");
            setLayout(new FlowLayout());
    		}
    		}
    

    继承 Frame 的窗体中,使用 setLayout方法 可以设置布局。

    组件方法

    如图是 GUI 控件中常用的控件关系继承图。
    file

    组件分为容器(Container)和控件。
    容器又分为窗体(Window)和面板(Panel)。

    Component 是所有组件的父类,Component 常用方法如下

    Component类(抽象类)主要方法 
    Color getBackground() : 获取部件的背景色 
    Font getFont() : 获取部件的显示字体 
    Graphics getGraphics(): 获取部件的Graphics属性对象
    void setBackground(Color c) : 设置部件的背景
    void setEnabled(boolean b) : 是否让部件功能有效 
    void setFont(Font f) : 设置部件的显示字体 
    void setSize(int width,int height) : 设置部件大小 
    void setVisible(boolean b) : 设置部件是否可见 
    void setForeground(Color c) : 设置部件的前景色 
    Tookit getToolkit() : 取得图形部件的工具集(Toolkit) 
    void requestFocus() : 让部件得到焦点 
    void add(PopupMenu popup) :给部件加入弹出菜单
    

    常用控件

    文本

    文本框(TextField)只能显示一行文本,文本域(TextArea)则可以显示、编辑多行文字。

    文本框的构造函数如下

    TextField():构造一个单行文本输入框。 
    TextField(int):指定长度的单行文本输入框。 
    TextField(String):指定初始内容的单行文本输入框。
    TextField(String, int):指定长度、指定初始内容。
    

    文本域的构造函数如下

    TextArea( ):构造一个文本域。 
    TextArea(int, int):构造一个指定长度和宽度的文本域。 TextArea(String):构造一个显示指定文字的文本域。
    TextArea(String, int, int):按指定长度、宽度和默认值构造文本域。
    

    文本控件的常用方法有

    void setEchoChar(‘*’) 设置回显字符 
    String getText( ) :获取输入框中的数据 
    void setText(String s) :往输入框写入数据 
    boolean isEditable( ):判断输入框是否可编辑。 
    void select(int start,int end):选定由开始和结 束位置指定的文本。 void selectAll( ):选定所有文本。 
    

    文本域(TextArea)中,还具有以下两个常用方法

    append(String s):将字符串添加到文本域的末尾 
    insert(String s,int index):将字符串插入到文本域的指定位置
    

    文本框有两个常用事件
    ActionEvent事件
    在文本框按回车键时引发
    注册:addActionListener() 接口:ActionListener
    方法:public void actionPerformed(ActionEvent e)

    TextEvent事件
    对文本输入部件数据更改操作 (添加、修改、删除)
    注册: addTextListener()
    接口:TextListener
    方法: public void textValueChanged(TextEvent e)

  • 相关阅读:
    [Unity3D]调用Android接口
    android studio build.gradle中 project.ANDROID_BUILD_SDK_VERSION
    java中static{}语句块详解
    [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
    c++中 extern
    android studio一直卡在Gradle:Executing tasks
    Android Studio导入第三方类库的方法
    Android按返回键退出程序但不销毁,程序后台运行,同QQ退出处理方式
    Ubuntu64位下使用eclipse闪退的解决
    Android4.1中BinderService的作用
  • 原文地址:https://www.cnblogs.com/whuanle/p/12539621.html
Copyright © 2011-2022 走看看