Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第58节:Java中的图形界面编程-GUI

第58节:Java中的图形界面编程-GUI

作者头像
达达前端
发布于 2019-07-04 10:04:25
发布于 2019-07-04 10:04:25
1.9K00
代码可运行
举报
文章被收录于专栏:达达前端达达前端
运行总次数:0
代码可运行

前言:

GUI是图形用户界面,在Java中,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图形用户界面就是以图形的方式来显示你计算机的操作界面, 我们计算机中操作的界面就是 我们Java中常说的图形用户界面, 这样的操作简单明了.

CLI的英文为Command Line User Interface, 是命令行用户接口, 命令行, 这就是我们程序员常常熟悉的, 常见的Dos命令行操作, 这些常用命令式需要记住的, CLI的操作就不那么直观了.

JavaGUI提供了对象在 java.awtjavax.swing 两个包中

在早年中, Java.awt为抽象窗口工具包, 英文为 Abstract Window ToolKit, 需要调用本地的系统方法来实现功能需求,属于重量级的控件.

而在awt的基础上,创建了一套图形界面系统, 从而提供了更多的组件, 而且完全是由Java实现的, 增强了移植性, 属于轻量级的控件. 有自己的显示效果, 显示自己的形状, 平台要求低了, 轻量级和体统嵌入的比较浅.

继承关系

Component .png

Button按钮,Label标签,Checkbox复选框,TextComponent文本组件,TextArea文本区域,TextField文本框.

组件里面还能放入组件,在Java中我们叫容器. window 窗体, Panel 面板 Frame小窗口,Dialog对话框,FileDialog文件对话框

GUI 布局

Flow 流式布局

上左下右

扫雷的格式布局

布局管理

常见的布局管理器:

流式布局管理: FlowLayout, 是从左到右的排列, 是Panel默认的布局管理.

边界布局: 东南西北,中, 是Frame默认的布局管理

网格布局管理: GridLayout

卡片布局管理: CardLayout

网格包布局管理: GridBagLayout

GUI 简单的小窗体

java.awt 包含用于创建用户界面和绘制图形图像的所有类.

java.awtComponent

java.lang.Object -> java.awt.Component

所有已实现的接口:

ImageObserver, MenuContainer, Serializable

component 是一个具有图形表示能力的对象.

component

子类

window

java.awtFrame

java.lang.Object -> java.awt.Component -> java.awt Container -> java.awt.Window -> java.awt.Frame

实现的接口:

ImageObserver, MenuContainer, Serializable, Accessible

直接已知的子类:

JFrame

Frame是带有标题和边框的顶层窗口.

frame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
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.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class FrameDemo {

    public static void main(String[] args) {

        //1,创建一个窗体。Frame
        Frame f = new Frame("my frame");
        //2, 对窗体进行基本设置。
        f.setSize(500, 400);
        f.setLocation(400, 200);
        //设置布局。
        f.setLayout(new FlowLayout());
        
        //给窗体添加组件。
         Button but = new Button("my button");
         
         //加入一个文本框组件。
         TextField tf = new TextField(40);
        
         //将组件添加到窗体中。
         f.add(tf);
         f.add(but);
         
         //1,在按钮上添加所需的监听器。
         but.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按钮被触发了....."+e);
                System.exit(0);

            }
        });
         
         f.addWindowListener(new WindowAdapter() {
    
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("window closing");
                System.exit(0);
            }

            @Override
            public void windowOpened(WindowEvent e) {
                
                System.out.println("孔雀开屏!window open");
            }
        
        });
         
        but.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if(e.getClickCount() == 2){
                    
                    System.out.println("mouse double click");
                }
            }
            
        });
         
         
        tf.addKeyListener(new KeyAdapter() {

            @Override
            public void keyPressed(KeyEvent e) {
                
                //1,如何获取录入的内容。通过键盘事件对象获取。
//              char key = e.getKeyChar();
//              int code = e.getKeyCode();
//              System.out.println(code+"...."+KeyEvent.getKeyText(code));
                
//              int code = e.getKeyCode();
//              if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){
//                  System.out.println("必须是0-9数字");
//                  e.consume();//直接取消默认处理方式。
//              }
                
                
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){
                    System.out.println("ctrl+enter run");
                    
                }
                
            }
            
        });
         
        
        //3,让窗体显示。
        f.setVisible(true);
        
        System.out.println("over");
    }

}

事件监听机制

  1. 事件源-组件
  2. 事件 - Event
  3. 监听器 - Listener
  4. 事件处理

Button

java.awt classButton

java.lang.Object -> java.awt.Component -> java.awt.Button

button

监听事件:

addActionListener(ActionListener l) 添加指定的动作侦听器以从此按钮接收动作事件。

窗口适配器

MouseListener

mouseListener

public interface MouseListener extends EventListener

用于在组件上接收“有趣”鼠标事件(按,释放,单击,输入和退出)的侦听器界面。

方法

方法的详细信息:

mouseClicked void mouseClicked(MouseEvent e) 在组件上单击鼠标按钮时调用

mousePressed void mousePressed(MouseEvent e) 在组件上按下鼠标时调用

mouseReleased void mouseReleased(MouseEvent e) 在组件上释放鼠标时调用

mouseEntered void mouseEntered(MouseEvent e) 当鼠标进入组件时调用

mouseExited void mouseExited(MouseEvent e) 当鼠标退出组件时调用

方法摘要

文本名称

图形化界面的工具

选择

选择2

选择3

选择4

选择5

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        //1,获取路径。通过文本框对象完成。
        String str_dir = jTextField1.getText();
        
        //2,将字符串路径封装成File对象。
        File dir = new File(str_dir);
        //判断。
        if(dir.exists()&&dir.isDirectory()){
            
            
            //清空文本区域。
            jTextArea1.setText("");
            //3,获取文件名称列表。
            String[] names = dir.list();
            for(String name :names){
            //4,将名字显示到文本区域。
            jTextArea1.append(name+LINE_SEPARATOR);
            }
            
        }

JFileChooser

public class JFileChooser extends JComponent implements Accessible

注意

事件监听机制流程:

  1. 监听器 - 将监听器注册到事件源
  2. 事件源 - 组件 (外部动作)
  3. 产生事件对象 - 将事件对象传给事件处理方式

菜单继承

继承

MenuComponent MenuBar,MenuItem,Menu

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nginx配置 location及rewrite规则详解
1. location正则写法 语法规则: location [=|~|~*|^~] /uri/ { … } =    开头表示精确匹配 ^~  开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。 ~   开头表示区分大小写的正则匹配 ~*  开头表示不区分大小写的正则匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹
用户1214487
2018/05/28
2.9K0
Nginx 重定向所有子域名到www
vim .htaccess  或  vim  /var/www/html/.htaccess
阳光岛主
2019/02/18
6.7K0
Nginx 重定向所有子域名到www
nginx的location、rewrite玩法详解
顺序 no优先级: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
sunsky
2020/08/20
1.2K0
开发必备的nginx常用功能使用说明指南
示例:nginx官方文档->Modules reference->ngx_http_gzip_module
lyb-geek
2022/03/10
5950
开发必备的nginx常用功能使用说明指南
Nginx配置location总结及rewrite规则写法
location = / {     # 精确匹配 /,主机名后面不能带任何字符串     [ configuration A ]  } location / {     # 因为所有的地址都以/开头,所有这条规则将匹配到所有请求     # 但是正则和最长字符串会优先匹配     [ configuration B ] } location /documents/ {     # 匹配任何以/documents/开头的地址,匹配符合以后,还要继续往下搜索     # 只有后面的正则表达式没有匹配到时,这一条才会采用     [ configuration C ] } location ~ /documents/Abc {     # 匹配任何以 /documents/开头的地址,匹配符合以后,还要继续往下搜索     # 只有后面的正则表达式没有匹配到时,才会采用这一条      [ configuration CC ] } location ^~ /images/ {     # 匹配任何以/images/开头的地址,匹配符合以后,停止往下搜索正则,采用这一条     [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ {     # 匹配所有以gif,jpg或jpeg结尾的请求     # 然而,苏朋友请求/images/下的图片会被config D处理,因为^~到达不了这一正则     [ configuration E ] } location /images/ {     # 字符匹配到 /images/,继续往下,会发现^~存在     [ configuration F ] } location /images/abc {     # 最长字符匹配到/images/abc,继续往下,会发现^~存在     # F与G的放置顺序是没有关系的     [ configuration G ] } location ~ /images/abc/ {     # 只有去掉config D才有效:先最长匹配config G开头的地址,继续往下搜索,匹配到这一正则,采用     [ configuration H ] } location ~* /js/.*/\.js
星哥玩云
2022/07/29
1.1K0
Nginx中location、rewrite使用方法
矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”。我这么说,大家一定会反驳我,因为按“先匹配普通,再匹配正则”解释不了大家平时习惯的按“先匹配正则,再匹配普通”的实践经验。这里我只能暂时解释下,造成这种误解的原因是:正则匹配会覆盖普通匹配。
星哥玩云
2022/07/28
1.2K0
Nginx中location、rewrite使用方法
nginx配置基础之rewrite
重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力;而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接;它还可以提高你的网站的安全性;而且通常会让你的网站更加便于使用和更专业。
后端技术探索
2018/08/10
9150
Nginx 配置详解
地址重写:为了标准化网址,比如输入baidu.com和www.baidu.com,都会被重写到www.baidu.com,而且我们在浏览器看到的也会是 www.baidu.com
白墨石
2022/05/11
6.4K0
nginx配置location语法
基本语法: location [=|~|~*|^~] /uri/ { … } = 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。 ~ 为区分大小写匹配(可用正则表达式) !~ 为区分大小写不匹配 ~* 为不区分大小写匹配(可用正则表达式) !~* 为不区分大小写不匹配 ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。 示例 location = / { # 只匹配 / 查询。 } location / { # 匹配任何查询,因为所有请求都
薛定喵君
2019/11/06
5430
nginx rewrite伪静态配置参数详解
nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中:
用户10270395
2022/12/16
2.3K0
nginx配置一篇足矣
老高在默认的nginx主配置中加入了时区,目的是输出日志时区默认为东八区。 同时加入了空主机头,防止直接用IP访问网站。
老高的技术博客
2022/12/28
6860
nginx location if 的匹配规则
~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,不是正则匹配。如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 =      #进行普通字符精确匹配 @     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
拓荒者
2019/03/11
13K0
【NGINX入门】6.Nginx的rewrite规则详解
nginx Rewrite规则可以让网站的url中达到某种状态时定向/跳转到某个规则,本文具体介绍这些规则和说明。
辉哥
2021/02/04
4.5K0
nginx rewrite伪静态配置参数详解
nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配,其中: * -f和!-f用来判断是否存在文件 * -d和!-d用来判断是否存在目录 * -e和!-e用来判断是否存在文件或目录 * -x和!-x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite * br
用户2135432
2018/06/04
3.2K0
nginx 进行正则匹配(常见正则匹配符号表示)
今天遇到网站之前的url被百度搜索引擎抓取,需要在服务中进行301强制跳转,(如访问:www.baidu.com/kenni-1,www.baidu.com/kenni-1/,两个统一跳转到www.b
botkenni
2019/09/09
35.5K0
Nginx基础——Rewrite规则
rewrite是nginx一个特别重要的指令,该指令可以使用正则表达式改写URI。可以指定一个或多个rewrite指令,按顺序匹配。
芋道源码
2018/08/17
1K0
nginx配置url重写
url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等
PM吃瓜
2019/08/13
1.9K0
nginx配置自定义变量实现日志动态分发
Nginx是一个异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存。下载地址:www.nginx.org。
神秘的寇先森
2018/12/07
5.1K0
后端程序员不得不会的 Nginx 转发匹配规则
而且两者有细微差别,使用alias指令必须用 last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。
程序员小富
2020/03/23
2.8K0
Nginx Location和Rewrite深入剖析
Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
星哥玩云
2022/07/26
7650
相关推荐
nginx配置 location及rewrite规则详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验