Java基础--awt详解以及简单应用

GUI
图形用户界面
CLI
命令行用户接口
Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中.
Java当中如何完成图形化界面的制作呢?
AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好.
Javax.Swing:在AWT基础上.建立一套图形化系统,提供更多组件,完全由java实现,增强了可移植性,属于轻量级控件.所以以后最好用Swing开发.
还有一个SWT外观包.
这里写图片描述
Lable用来封装文字.CheckBox复选框.TextComponent:文本组件.
Container: 容器,是一个特殊的组件,可以通过add方法来添加其他组件进来.
Window:Frame框架.Dialog:对话框.FileDialog:文件对话框就是打负责文件的选取和保存的窗口.
容器中的组件的排放方式,就是布局.
Panel:面板
常见的布局管理器:
FlowLayout:流式布局管理器.先放中间.第二次放右边.默认居中.
从左到右.
Panel默认的布局管理器
BorderLayout:边界式布局
上下左右打麻将.如果不指定方向,那么会居中直接填满整个窗口.添加新组件就覆盖原组件.
GridLayout:网格式布局
每个组件都存放在格子当中,计算器就是一个GridLayout.
GridBagLayout:网格包布局管理器.
CardLayout:卡片式布局:

创建图形化界面:

1. 创建Frame窗体
2. 对窗体进行基本设置,比如大小位置和布局
3. 定义组件
4. 将组件通过窗体的add()添加到窗体中
5. 让窗体显示,通过setVisible(true);方法

事件监听机制:

1. 事件源:图形界面组件.
2. 事件:Event.每一个事件源都有自己的特有的对应事件和共性事件.
3. 监听器:可以触发某一个事件的动作都已经封装到了监听器中,

以上三者在Java中都定义好了,直接获取其对象就可以了.我们要做的事情就是对产生的动作进行处理.

这里写图片描述

这里写图片描述

添加监听器:f.add(WindowListener wl)
WindowListener的一个抽象子类 WindowAdapter,已经实现了接口,覆盖了其中所有方法,只要继承WindowAdapter覆盖自己需要的方法即可!
一般开发awt要导入两个包: java.awt.*;java.awt.event.*;

要让按钮具备退出的功能,那么按钮就是事件源,添加一个监听器.ActionListener是少数没有Adapter类的其中一个.因为它里面只有一个方法,直接实现即可.ActionPerfored(ActionEvent ae);

鼠标事件和键盘事件:
AddKeyListener
AddMouseListener
此时点击按钮谁会先执行?
鼠标动作先.

下面我们来动手做一些图形化界面:
实例1

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class AwtDemo1 {public static void main(String[] args) {Frame f = new Frame("my awt");f.setLayout(new FlowLayout());f.setVisible(true);f.setSize(300,200);f.setLocation(700, 400);Button b = new Button("我是一个按钮");//定义一个按钮,名称为"我是一个按钮"f.add(b);f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){System.out.println("我关!");System.exit(0); //点击右上角关闭按钮,退出虚拟机}public void windowActivated(WindowEvent e1){System.out.println("activated"); //每次窗口被激活,打印"activated"}public void windowOpened(WindowEvent e2){System.out.println("我活啦!"); //每次打开窗口,会输出"我活啦"}});System.out.println("hello world!");}
}
class myWindow extends WindowAdapter{public void windowClosing(WindowEvent e) {System.out.println("window closing");e.getWindow();System.out.println(e.toString());System.out.println(e.getWindow());System.out.println(e.getSource());System.exit(0);}
}

这里写图片描述

实例2

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class FrameDemo {public static void main(String[] args) {// TODO 自动生成的方法存根new Frame_Demo();}}class Frame_Demo {private Frame f;private Button but;Frame_Demo() {init();}public void init() {f = new Frame("myFrame");f.setBounds(1000, 500, 300, 400);f.setLayout(new FlowLayout());but = new Button("Run");myEvent();f.add(but);f.setVisible(true);but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根System.out.println("button do");System.exit(0);}});}private void myEvent() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}public void windowOpened(WindowEvent e) {System.out.println("活了");}});}
}

这里写图片描述
点击按钮,打印出
这里写图片描述

实例3

package guiDemos;import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
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;public class MouseKeyEventDemo {public static void main(String[] args) {// TODO 自动生成的方法存根new mouseAndKey();}}class mouseAndKey {private Frame f;private Button but;private TextField tf;mouseAndKey() {init();}public void init() {f = new Frame("myFrame");f.setBounds(1000, 500, 300, 400);f.setLayout(new FlowLayout());but = new Button("Run");tf = new TextField(20);myEvent();f.add(tf);f.add(but);f.setVisible(true);tf.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {int code = e.getKeyCode(); //判断输入的键值是否为数字if (!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9)) {System.out.println(code+"is illegal");e.consume();}}});/** but.addActionListener(new ActionListener() {* * @Override public void actionPerformed(ActionEvent e) { // TODO* 自动生成的方法存根 System.out.println("button do"); System.exit(0); } });*/but.addMouseListener(new MouseAdapter() {public void mouseEntered(MouseEvent e) {System.out.println("entered");}public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2)System.out.println("双击动作");}});but.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if (KeyEvent.getKeyText(e.getKeyCode()).equals("Q") && e.isControlDown())System.exit(0);System.out.println(KeyEvent.getKeyText(e.getKeyCode()) + "..." + e.getKeyChar());System.out.println("CTRL+Q");}});}private void myEvent() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}public void windowOpened(WindowEvent e) {System.out.println("活了");}});}
}

实例4

package guiDemos;import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class MyMenuDemo {private Frame frame;private MenuBar bar;private Menu fileMenu, subMenu;private MenuItem closeItem, openItem, saveItem;private FileDialog openDlg, saveDlg;private TextArea ta;MyMenuDemo() {init();}public void init() {frame = new Frame("my Window");bar = new MenuBar();fileMenu = new Menu("文件");openItem = new MenuItem("打开");saveItem = new MenuItem("保存");closeItem = new MenuItem("退出");ta = new TextArea();openDlg = new FileDialog(frame, "打开文件", FileDialog.LOAD);saveDlg = new FileDialog(frame, "保存文件", FileDialog.SAVE);frame.add(ta);fileMenu.add(openItem);fileMenu.add(saveItem);fileMenu.add(closeItem);bar.add(fileMenu);frame.setMenuBar(bar);frame.setBounds(700, 300, 600, 500);frame.setVisible(true);closeItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根System.exit(0);}});openItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根openDlg.setVisible(true);String fileName = openDlg.getDirectory() + openDlg.getFile();if (openDlg.getFile() != null) {File f = new File(fileName);// File fileName = new File(openDlg.getFile());// ta.append(f.toString());ta.setText("");BufferedReader br = null;try {br = new BufferedReader(new FileReader(f));String line = null;while ((line = br.readLine()) != null) {ta.append(line + "\r\n");}} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();} finally {try {if (br != null)br.close();} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}}}}});saveItem.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根saveDlg.setVisible(true);BufferedWriter bw = null;String fileName = saveDlg.getDirectory()+saveDlg.getFile();if(saveDlg.getFile()!=null){try {bw = new BufferedWriter(new FileWriter(fileName));String text = ta.getText();bw.write(text);} catch (IOException e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}finally{try {if(bw!=null)bw.close();} catch (Exception e2) {// TODO: handle exception}}}}});frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {// TODO 自动生成的方法存根new MyMenuDemo();}}

选择文件后,文本区中显示文本内内容,相当于一个windows小工具记事本
这里写图片描述

实例5
写一个程序,用于遍历并文件夹中的所有内容

package guiDemos;import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
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.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;public class MyWindowDemo {private Frame frame;private TextField tf;private Button but;private TextArea ta;private Dialog dlg;private Label lbl;private Button butOK;MyWindowDemo() {init();}public void init() {frame = new Frame("my Window");frame.setBounds(900, 400, 400, 500);frame.setLayout(new FlowLayout());tf = new TextField(30);but = new Button("转到");ta = new TextArea(20, 40);frame.add(tf);frame.add(but);frame.add(ta);ta.setEditable(false);frame.setVisible(true);myEvent();tf.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e){if(KeyEvent.getKeyText(e.getKeyCode())=="Enter")doFile();}});but.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {doFile();}});}private void doFile(){ta.setText("");File f = new File(tf.getText());if (!f.exists()) {
//			ta.setText("请重新输入地址");dlg = new Dialog(frame, "输入错误",false);lbl = new Label("\""+f.toString()+"\""+"不是一个有效路径");butOK = new Button("确定");dlg.setLayout(new FlowLayout());dlg.setBounds(900, 500, 300, 160);dlg.add(lbl);dlg.add(butOK);dlg.setVisible(true);dlg.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){dlg.setVisible(false);}});butOK.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根dlg.setVisible(false);}});} elsefileList(f);}private void fileList(File f) {// TODO 自动生成的方法存根File[] files = f.listFiles();for (File file : files) {ta.append(file.toString());ta.append("\r\n");}/** for (File file : files) { if (!file.isHidden()) { if* (file.isDirectory()) { ta.append(file.toString()); ta.append("\r\n");* fileList(file); } else { ta.append(file.toString());* ta.append("\r\n"); // System.out.println(f); } } }*/}private void myEvent() {frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {// TODO 自动生成的方法存根new MyWindowDemo();}
}

这里写图片描述

以上就是Java awt界面的api基本使用.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vxworks linux 多线程api,vxWorks多任务编程初探(转)

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的一个独立单位。程序只是一组指令的有序集合&#xff0c;它本身没有任何运行的含义&#xff0c;只是一个静态实体。而进程则不同&#xff0c;它是程序在某个数据集…

Java图形化界面设计之容器(JFrame)详解

Java图形化界面设计之容器&#xff08;JFrame&#xff09;详解 Java图形化界面设计——容器&#xff08;JFrame&#xff09; 程序是为了方便用户使用的&#xff0c;因此实现图形化界面的程序编写是所有编程语言发展的必然趋势&#xff0c;在命令提示符下运行的程序可以让我们…

10个最受欢迎的JavaScript图表库

目前网上有很多用于绘制图表图形的免费JavaScript插件和图表库&#xff0c;技术学派在这里给大家推荐10个比较强大的绘制图表图形的JavaScript图表库。其中一些插件需要主流浏览器的支持&#xff0c;而另外一些经过整合后&#xff0c;也能在不同的平台和老版本的浏览器上工作。…

Linux查看lvm元数据,LVM元数据服务lvmetad分析

lvmetad是LVM中用于处理元数据缓存的服务。缓存状态Empty &#xff1a; 系统中可用的设备还没有被添加到lvmetad。Scanning &#xff1a; 部分系统中可用的设备已经被添加进lvmetad。Initialized &#xff1a; 全部系统中可用的设备已经被添加进lvmetad。Outdated &#xff1a;…

sudo 命令_su、sudo、sudo su、sudo -i的用法和区别

sudo 命令 1、sudo 简介 sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。这样不仅减少了root用户的登录 和管理时间&#xff0c;同样也提高了安全性。sudo不是…

备份恢复linux,备份和恢复Linux系统

备份系统 首先进入文件系统的根目录(当然&#xff0c;如果你不想备份整个文件系统&#xff0c;你也可以进入你想要备份的目录&#xff0c;包括远程目录或者移动硬盘上的目录)&#xff1a; # cd / 下面是我用来备份系统的完整命令&#xff1a; # tar cvpzf backup.tgz - - exclu…

ProcessBuilder类的介绍及使用_Process和ProcessBuilder入门

ProcessBuilder类的介绍及使用 前言 在做一个项目的时候需要用到运行时动态执行JAVA命令&#xff0c;一开始的思路是运行时生成bat脚本&#xff0c;然后通过Runtime类的exec方法之行bat脚本&#xff0c;但是此方法不好的地方在于脚本执行时会弹出一个cmd程序界面框。后面在参…

c语言不能在函数中求数组大小,C语言中数组长度不能用变量定义吗?

翻翻过去那场雪1、C语言中不支持。C中支持变长数组(你可以自行度娘变长数组和alloca函数)&#xff0c;但是因为其实在栈上分配&#xff0c;不被推荐使用。做为解决方案&#xff0c;你可以使用C式的malloc函数或者C式的new函数来在堆上动态分配内存&#xff0c;这样长度是完全可…

Java如何基于ProcessBuilder类调用外部程序

Java如何基于ProcessBuilder类调用外部程序 demo1 Testpublic void testProcessBuilder() {ProcessBuilder processBuilder new ProcessBuilder(); // processBuilder.command("ping","127.0.0.1");processBuilder.command("ipconfig");//…

计算机专业课程设计报告c语言,计算机程序设计(C语言)课程设计报告.doc

计算机程序设计(C语言)课程设计报告.doc计算机程序设计C语言课程设计报告题目电子动画时钟 学院 机电工程学院专业 班级090109班学号 姓名 指导教师 设计日期 一、概述选题背景 随着社会的进步和科技的发展&#xff0c;电子钟表逐渐成为了人们生活中不可缺少的一部分。设计思路…

Java ProcessBuilder类学习

文章目录一、ProcessBuilder基础1、ProcessBuilder类1.1 概述1.2 进程属性2、Process类2.1 概述2.2 Process抽象类2.3 创建Process对象方式3、ProcessBuilder与Runtime.exec()异同3.1 相同点3.2 不同点二、**ProcessBuilder**实战1、API介绍2、实战demo一、ProcessBuilder基础 …

c语言用栈编写数制转换程序,数制转换-栈的应用(C++实现)

本程序实现的是十进制与不同进制之间的的数据转换&#xff0c;利用的数据结构是栈&#xff0c;基本数学方法辗转相除法。conversion.h#includeusing namespace std;//将十进制的数据n转换成m进制的数据stack conversion(unsigned int n,unsigned int m){stack s;while(n){s.pus…

Java replace和replaceAll的区别以及用法

replace和replaceAll是JAVA中常用的替换字符的方法 public String replace(char oldChar, char newChar) 在字符串中用newChar字符替代oldChar字符&#xff0c;返回一个新的字符串 public String replaceAll(String regex,String replacement)使用给定的 replacement 字符串替…

两个变量实现查找坏环c语言,C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)...

程序员无言 2020-07-07一、C语言程序的构成与C、Java相比&#xff0c;C语言其实很简单&#xff0c;但却非常重要。因为它是C、Java的基础。不把C语言基础打扎实&#xff0c;很难成为程序员高手。1、C语言的结构先通过一个简单的例子&#xff0c;把C语言的基础打牢。C语言的结构…

Java-使用Math,实现lg、平方、开方、round、floor、ceil

一、lg 使用方法:Math.log10() public class MathMethod {public static void main(String[] args) {int a100;double b100;float c100;System.out.println("lg的实现&#xff1a;"Math.log10(a));System.out.println("lg的实现&#xff1a;"Math.log10(…

累加器A用c语言,累加器A的主要作用是什么_一文解析累加器a和acc的区别

描述累加器简介在中央处理器中&#xff0c;累加器(accumulator) 是一种寄存器&#xff0c;用来储存计算产生的中间结果。如果没有像累加器这样的寄存器&#xff0c;那么在每次计算 (加法&#xff0c;乘法&#xff0c;移位等等) 后就必须要把结果写回到内存&#xff0c;也许马上…

Java中的Math函数常用方法总结

Math函数中常用的一些方法 类Math包含用于执行基本数字运算的方法 算术运算 Math.abs(a)&#xff1a;取a的绝对值Math.sqrt(a)&#xff1a;取a的平方根Math.cbrt(a)&#xff1a;取a的立方根Math.max(a,b)&#xff1a;取a、b之间的最大值Math.min(a,b)&#xff1a;取a、b之间…

单片机C语言节日彩灯,单片机c语言节日彩灯控制器设计.docx

单片机c语言节日彩灯控制器设计湖南涉外经济学院课程设计报告课程名称&#xff1a;单片机原理及应用报告题目&#xff1a;节日彩灯控制器的设计学生姓名&#xff1a;所在学院&#xff1a;信息科学与工程学院专业班级&#xff1a;电子信息工程1102班学生学号&#xff1a;指导教师…

Java中的<<、>>、>>>运算符

二进制中的原码、反码、补码 有符号数&#xff1a; 对于有符号数而言&#xff0c;符号的正、负机器是无法识别的&#xff0c;但由于“正、负”恰好是两种截然不同的状态&#xff0c;如果用“0”表示“正”&#xff0c;用“1”表示“负”&#xff0c;这样符号也被数字化了&…

c语言随机漫步,基于最短路径的随机游走算法研究与应用

摘要&#xff1a;近年来,人们越来越多地关注数据集中数据点之间的关系。不同种类的网络相继涌现。有链接和节点类型都单一的同质网络如以朋友友谊为基础建立起来的社交网站;以网络链接形成的互联网。另外还有多种链接和节点类型形成的异质网络如医学领域病人,疾病与治疗方法或者…