Java AWT Swing(图形化界面编程)(一)

ef9037fce71b4bd9b997441c157db38d.png

 

 

 

 

 

 

目录

1.简介

2.Java中的图像化界面----Awt与Swing

一、AWT编程

1.简介

2.AWT的继承体系

 3.container容器

3.1container继承体系

3.2.常见API

 3.3容器演示一

3.4容器演示二

3.5容器演示三

1.简介:

通常情况下,java语言一般是用来开发后台程序的,所谓的后台程序就是部署在服务器端的程序,默默的工作,用户是看不到任何界面的,所以很多情况下,学习java会感觉很枯燥。

8011f6bd3f8d401da783cdfb045bcef6.png

 

事实上,我们使用java语言同样可以完成图形化界面程序的开发,而学习图形化界面编程相对来说就会有趣很多,因为所见即所得,也就是说,我们写的大部分代码的执行效果,是可以通过图形化界面实实在在能够看得到的。

dc7276b6f98b441690b834dee52ce1bd.png

 

2.Java中的图像化界面----Awt与Swing:

java使用AWT和Swing相关的类可以完成图形化界面编程,其中AWT的全称是抽象窗口工具集(Abstract WindowToolkit),它是sun公司最早提供的GUI库,这个GUI库提供了一些基本功能,但这个GUI库的功能比较有限,所以后来sun公司又提供了Swing库。通过使用AWT和Swing提供的图形化界面组件库,java的图形化界面编程非常简单,程序只需要依次创建所需的图形组件,并以合适的方式将这些组件组织在一起,就可以开发出非常美观的用户界面。

 

一、AWT编程:

1.简介:

当JDK1.0发布时,Sun 提供了一套基本的GUI类库,这个GUl类库希望可以在所有平台下都能运行,这套基本类库被称为"抽象窗口工具集CAbstract Window Toolkit )”,它为Java应用程序提供了基本的图形组件。AWT是窗口框架,它从不同平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台。简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台一致的对等体。
使用AWT创建的图形界面应用和所在的运行平台有相同的界面风格,比如在Windows操作系统上,它就表现出 Windows风格;在UNIX操作系统上,它就表现出UNIX风格。Sun希望采用这种方式来实现"Write Once,Run Anywhere "的目标。
 

 

2.AWT的继承体系:

所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWT编程中有两个基类:Component和MenuComponent。
        Component:代表一个能以图形化方式显示出来,并可与用户交互的对象,例如Button代表一个按钮,TextField 代表一个文本框等;
        MenuComponent :则代表图形界面的菜单组件,包括MenuBar(菜单条)、Menultem (菜单项)等子类。

bd6ce46763444de0be77bc40bf550afd.png

 

其中Container是一种特殊的 Component,它代表一种容器,可以盛装普通的Component。
AWT中还有一个非常重要的接口叫LayoutManager,如果一个容器中有多个组件,那么容器就需要使用LayoutManager来管理这些组件的布局方式。
ae0f77e04492450aa91e91ee06c7c295.png

 3.container容器

3.1container继承体系:

3c805e66e1864e9bac4231f79d6db03e.webp

 

        1.Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;
        2.Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;
        3.ScrollPane是一个带滚动条的容器,它也不能独立存在,默认使用BorderLayout管理其内部组件布局;

3.2.常见API:

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。


db9d5a9cc44446a89fb61372542b3b66.png

Container作为容器根类,提供了如下方法来访问容器中的组件。


81dbbc15ea1e44258b85321b373b7922.png

 3.3容器演示一:

        使用window容器实现一个基本的窗口。

174446e0c4524fd294ef4b6cf08cb664.png

 

 

import java.awt.*;

/**
 * Window:窗口容器
 * Frame:创建窗口
 */
public class WindowDemo {
    public static void main(String[] args) {
        //1.创建一个窗口对象
        Frame frame = new Frame("测试window窗口");
        //2.指定窗口的位置、大小
        frame.setLocation(100,100);
        frame.setSize(500,300);
        //3.设置窗口对象可见
        frame.setVisible(true);
    }
}

3.4容器演示二:

        使用Panel容器,实现一个基本的按钮和文本框的窗口。

275c67711d0a4a77a1247d19e9513b4e.png

 

import java.awt.*;

/**
 * panel以及其他的容器,都不能独立存在,必须依附于window存在.
 * Panel:内嵌容器
 */
public class PanelDemo {
    public static void main(String[] args) {
        //1.创建一个window对象
        Frame frame = new Frame("演示Panel窗口");
        //2.创建一个Panel对象
        Panel panel = new Panel();
        //3.创建一个文本框和一个按钮,并且把他们放入到Panel容器中
        panel.add(new TextField("这里是一个测试文本"));
        panel.add(new Button("这里是一个测试按钮"));
        //4.把Panel放入到window中
        frame.add(panel);
        //5.指定窗口的位置、大小
        frame.setBounds(100,100,500,300);
        //6.设置窗口对象可见
        frame.setVisible(true);
    }
}

3.5容器演示三:

        通过ScrollPane容器,实现带有滚动条的窗口。

3bf02184d4b84d8ead4183f1d41d14b0.png

 

import java.awt.*;

/**
 * ScrollPane:含有滚动条的容器
 */
public class ScrollPaneDemo {
    public static void main(String[] args) {
        //1.创建一个window对象
        Frame frame = new Frame("演示ScrollPane窗口");
        //2.创建一个ScrollPane对象
        ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        //3.创建一个文本框和一个按钮,并且把他们放入到ScrollPane容器中
        scrollPane.add(new TextField("这里是一个测试文本"));
        scrollPane.add(new Button("这里是一个测试按钮"));
        //4.把ScrollPane放入到window中
        frame.add(scrollPane);
        //5.指定窗口的位置、大小
        frame.setBounds(100,100,500,300);
        //6.设置窗口对象可见
        frame.setVisible(true);
    }
}

程序明明向ScrollPane容器中添加了一个文本框和一个按钮,但只能看到一个按钮,却看不到文本框,这是为什么呢?这是因为ScrollPane使用BorderLayout布局管理器的缘故,而BorderLayout 导致了该容器中只有一个组件被显示出来。下一节将详细介绍布局管理器的相关知识。
 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue基础知识二:你对SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用呢

一、什么是SPA SPA(single-page application),翻译过来就是单页应用SPA是一种网络应用程序或网站的模型,它通过动态重写当前页面来与用户交互,这种方法避免了页面之间切换打断用户体验在单页应用中,所有必…

Linux查看GPU显卡/CPU内存/硬盘信息

显卡信息命令/CPU内存/硬盘 1.显卡2、CPU内存3、硬盘 1.显卡 nvidia-smi nvidia-smi(显示一次当前GPU占用情况) nvidia-smi -l(每秒刷新一次并显示) watch -n 5 nvidia-smi (其中,5表示每隔6秒刷新一次终端…

10.pod资源限制和健康检查

文章目录 资源限制探针(健康检查)启动、退出动作总结 资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。当为 pod 中的容器指定了 request 资源时&#xff0c…

Python中的dataclass:简化数据类的创建

Python中的dataclass是一个装饰器,用于自动添加一些常见的方法,如构造函数、__repr__、__eq__等。它简化了创建数据类的过程,减少了样板代码,提高了代码的可读性和可维护性。有点类似java里面的Java Bean。 让我们看一个简单的例子…

Linux: network: tools: tcpdump,抓取vlan包需要注意的事情;不然会出现LLC协议

https://bugzilla.redhat.com/show_bug.cgi?id498981#c4 https://serverfault.com/questions/544651/vlan-tags-not-shown-in-packet-capture-linux-via-tcpdump 如果不加-e参数,抓取不到 vlan信息,会导致wireshark解析出现问题。因为,抓到…

keil下载程序具体过程:概述

一、前言 keil下载程序具体过程将由一系列的博客组成,将深入探讨keil这种IDE下载镜像文件时具体做了哪些事情。我们平常下载镜像的时候,只是点击了一下Download按钮,剩下的都由keil替代我们完成了。本系列博客将揭示这一过程,keil…

pytest fixture 高级使用

一、fixture中调用fixture 举例: 输出: 说明:登录fixture 作为参数传递到登出方法中,登录方法的返回值就可以被登出方法使用 二、在fixture中多参数的传递(通过被调用函数传参) 举例: 输出&a…

无涯教程-Perl - qq函数

描述 可以使用此函数代替双引号。这实际上不是一个函数,更像是一个运算符,但是如果您在其他程序员的程序中看到它却不记得它是什么,那么可能会在这里看。实际上,您可以使用任何一组定界符,而不仅仅是括号。 语法 以下是此函数的简单语法- qq ( string )返回值 该函数返回双…

wsl2安装mysql环境

安装完mysql后通过如下命令启动mysql service mysql start 会显示如下错误: mysql: unrecognized service 实际上上面显示的错误是由于mysql没有启动成功造成的 我们要想办法成功启动mysql才可以 1.通过如下操作就可以跳过密码直接进入mysql环境 2.如果想找到my…

第48节:cesium 面交集计算(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-navigation

android 如何分析应用的内存(十七)——使用MAT查看Android堆

android 如何分析应用的内存&#xff08;十七&#xff09;——使用MAT查看Android堆 前一篇文章&#xff0c;介绍了使用Android profiler中的memory profiler来查看Android的堆情况。 如Android 堆中有哪些对象&#xff0c;这些对象的引用情况是什么样子的。 可是我们依然面临…

Android Retrofit 源码分析

一、retrofit 是什么&#xff1f; Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。 网络请求的工作本质上是 OkHttp 完成&#xff0c;而 Retrofit 仅负责 网络请求接口的封装。 1&#xff09;App应用程序通过 Retrofit 请求网络&#xff0c;实际上是使用 Retrofit 接口…

多线程与并发编程面试题总结

多线程与并发编程 多线程 线程和进程的区别&#xff1f; 从操作系统层面上来讲&#xff1a;进程(process)在计算机里有单独的地址空间&#xff0c;而线程只有单独的堆栈和局部内存空间&#xff0c;线程之间是共享地址空间的&#xff0c;正是由于这个特性&#xff0c;对于同…

UnityWebGL移动端兼容性说明

测试时间2023.8.10 官方文档说明 依据Unity官方最新版本文档&#xff08;2021.3LTS&#xff09;&#xff0c;关于WebGL的兼容性说明为"Unity WebGL不支持移动设备。它可能适用于高端设备&#xff0c;但当前的设备通常不够强大&#xff0c;并且没有足够的内存来支持Unity …

植被利用了多少陆地降水?

降水部分被植被利用&#xff0c;部分转化为河水流量。量化植被直接使用的水量对于解读气候变化的影响至关重要。 新提出的模型的预测与之前的结果进行了比较。资料来源&#xff1a;AGU Advances 水是地球的重要组成部分&#xff0c;因此&#xff0c;了解大尺度的水平衡及其建模…

hackNos靶机

靶机训练1 - hackNos: Os-hackNos 靶机平台 Vulnhub 是一个提供各种漏洞环境的靶场平台&#xff0c;供安全爱好者学习使用&#xff0c;大部分环境是做好的虚拟机镜像文件&#xff0c;镜像预先设计了多种漏洞&#xff0c;需要使用VMware或者VirtualBox运行。每个镜像会有破解的目…

LVS/DR+Keepalived负载均衡实战(一)

引言 负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了&#xff0c;当听到此概念的第一反应是想到举世闻名的nginx&#xff0c;但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了&#xff0c;因为对于一般系统来说&#xff0c;很多应用场合中采用nginx基本已经满足需求&a…

【C# Programming】C#第一课(自己学习的笔记)

目录 一、C# 介绍 1.1 托管代码(Manage Code ) &#xff1a; 1.2 基础类型库 (Base Class Library)&#xff1a; 1.3 程序集(Assembly)&#xff1a; 1.4 .NET 框架&#xff1a; 1.5 公共中间语言(Common Intermediate Language)&#xff0c;简称 IL。 1.6 C#编译器将源代…

android Ndk Jni动态注册方式以及静态注册

目录 一.静态注册方式 二.动态注册方式 三.源代码 一.静态注册方式 1.项目名\app\src\main下新建一个jni目录 2.在jni目录下,再新建一个Android.mk文件 写入以下配置 LOCAL_PATH := $(call my-dir)//获取当前Android.mk所在目录 inclu

STM32F429IGT6使用CubeMX配置外部中断按键

1、硬件电路 2、设置RCC&#xff0c;选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、NVIC配置 PC13相同 5、生成工程配置 6、部分代码 中断回调函数 /* USER CODE BEGIN 0 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin GPIO_PIN_0){HAL_GPIO…