AWT中常用组件

基本组件

组件名 功能
Button Button
Canvas 用于绘图的画布
Checkbox 复选框组件(也可当做单选框组件使用)
CheckboxGroup 用于将多个Checkbox 组件组合成一组, 一组 Checkbox 组件将只有一个可以 被选中 , 即全部变成单选框组件
Choice 下拉选择框
Frame 窗口 , 在 GUI 程序里通过该类创建窗口
Label 标签类,用于放置提示性文本
List JU表框组件,可以添加多项条目
Panel 不能单独存在基本容器类,必须放到其他容器中
Scrollbar 滑动条组件。如果需要用户输入位于某个范围的值 , 就可以使用滑动条组件 ,比如调 色板中设置 RGB 的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、 滑块的大小、最小值和最大值。
ScrollPane 带水平及垂直滚动条的容器组件
TextArea 多行文本域
TextField 单行文本框

这些 AWT 组件的用法比较简单,可以查阅 API 文档来获取它们各自的构方法、成员方法等详细信息。

API 文档地址:https://www.apiref.com/java11-zh/java.desktop/javax/swing/package-summary.html

案例:

​ 实现下图效果:

演示代码:

import javax.swing.*;
import java.awt.*; public class BasicComponentDemo {
Frame frame = new Frame("这里测试基本组件"); //定义一个按钮
Button ok = new Button("确认"); //定义一个复选框组
CheckboxGroup cbg = new CheckboxGroup();
//定义一个单选框,初始处于被选中状态,并添加到cbg组中
Checkbox male = new Checkbox("男", cbg, true); //定义一个单选框,初始处于未被选中状态,并添加到cbg组中
Checkbox female = new Checkbox("女", cbg, false); //定义一个复选框,初始处于未被选中状态
Checkbox married = new Checkbox("是否已婚?", false); //定义一个下拉选择框
Choice colorChooser = new Choice(); //定义一个列表选择框
List colorList = new List(6, true); //定义一个5行,20列的多行文本域
TextArea ta = new TextArea(5, 20); //定义一个50列的单行文本域
TextField tf = new TextField(50); public void init() {
//往下拉选择框中添加内容
colorChooser.add("红色");
colorChooser.add("绿色");
colorChooser.add("蓝色"); //往列表选择框中添加内容
colorList.add("红色");
colorList.add("绿色");
colorList.add("蓝色"); //创建一个装载按钮和文本框的Panel容器
Panel bottom = new Panel();
bottom.add(tf);
bottom.add(ok); //把bottom添加到Frame的底部
frame.add(bottom,BorderLayout.SOUTH); //创建一个Panel容器,装载下拉选择框,单选框和复选框
Panel checkPanel = new Panel();
checkPanel.add(colorChooser);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married); //创建一个垂直排列的Box容器,装载 多行文本域和checkPanel
Box topLeft = Box.createVerticalBox();
topLeft.add(ta);
topLeft.add(checkPanel); //创建一个水平排列的Box容器,装载topLeft和列表选择框
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList); //将top添加到frame的中间区域
frame.add(top); //设置frame最佳大小并可见
frame.pack();
frame.setVisible(true);
} public static void main(String[] args) { new BasicComponentDemo().init(); }
}

对话框Dialog

Dialog

Dialog 是 Window 类的子类,是 一个容器类,属于特殊组件 。 对话框是可以独立存在的顶级窗口, 因此用法与普通窗口的用法几乎完全一样,但是使用对话框需要注意下面两点:

  • 对话框通常依赖于其他窗口,就是通常需要有一个父窗口;
  • 对话框有非模式(non-modal)和模式(modal)两种,当某个模式对话框被打开后,该模式对话框总是位于它的父窗口之上,在模式对话框被关闭之前,父窗口无法获得焦点。

模式窗体:你必须关闭该窗体,才能操作其它窗体;比如说,必须按确定或取消,或者按关闭。

非模式窗体:不必关闭该窗体,就可转换到其它窗体上进行操作。

方法名称 方法功能
Dialog(Frame owner, String title, boolean modal) 创建一个对话框对象:
owner:当前对话框的父窗口
title:当前对话框的标题
modal:当前对话框是否是模式对话框,true/false

案例1:

​ 通过Frame、Button、Dialog实现下图效果:

演示代码1:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*; public class DialogDemo1 { public static void main(String[] args) { Frame frame = new Frame("这里测试Dialog"); Dialog d1 = new Dialog(frame, "模式对话框", true);
Dialog d2 = new Dialog(frame, "非模式对话框", false); Button b1 = new Button("打开模式对话框");
Button b2 = new Button("打开非模式对话框"); //设置对话框的大小和位置
d1.setBounds(20,30,300,400);
d2.setBounds(20,30,300,400); //给b1和b2绑定监听事件
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d2.setVisible(true);
}
}); //把按钮添加到frame中
frame.add(b1);
frame.add(b2,BorderLayout.SOUTH); //设置frame最佳大小并可见
frame.pack();
frame.setVisible(true); }
}

在Dialog对话框中,可以根据需求,自定义内容

案例:

​ 点击按钮,弹出一个模式对话框,其内容如下:

演示代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import java.awt.*; public class DialogDemo2 { public static void main(String[] args) { Frame frame = new Frame("这里测试Dialog"); Dialog d1 = new Dialog(frame, "模式对话框", true); //往对话框中添加内容
Box vBox = Box.createVerticalBox(); vBox.add(new TextField(15));
vBox.add(new JButton("确认"));
d1.add(vBox); Button b1 = new Button("打开模式对话框"); //设置对话框的大小和位置
d1.setBounds(20,30,200,100); //给b1绑定监听事件
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
}
}); //把按钮添加到frame中
frame.add(b1); //设置frame最佳大小并可见
frame.pack();
frame.setVisible(true); }
}

FileDialog

Dialog 类还有 一个子类 : FileDialog ,它代表一个文件对话框,用于打开或者保存 文件,需要注意的是FileDialog无法指定模态或者非模态,这是因为 FileDialog 依赖于运行平台的实现,如果运行平台的文件对话框是模态的,那么 FileDialog 也是模态的;否则就是非模态的 。

方法名称 方法功能
FileDialog(Frame parent, String title, int mode) 创建一个文件对话框:
parent:指定父窗口
title:对话框标题
mode:文件对话框类型,如果指定为FileDialog.load,用于打开文件,如果指定为FileDialog.SAVE,用于保存文件
String getDirectory() 获取被打开或保存文件的绝对路径
String getFile() 获取被打开或保存文件的文件名

案例2:

​ 使用 Frame、Button和FileDialog完成下图效果:

演示代码2:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; public class FileDialogTest { public static void main(String[] args) { Frame frame = new Frame("这里测试FileDialog"); FileDialog d1 = new FileDialog(frame, "选择需要加载的文件", FileDialog.LOAD);
FileDialog d2 = new FileDialog(frame, "选择需要保存的文件", FileDialog.SAVE); Button b1 = new Button("打开文件");
Button b2 = new Button("保存文件"); //给按钮添加事件
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d1.setVisible(true);
//打印用户选择的文件路径和名称
System.out.println("用户选择的文件路径:"+d1.getDirectory());
System.out.println("用户选择的文件名称:"+d1.getFile());
}
}); System.out.println("-------------------------------");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
d2.setVisible(true);
//打印用户选择的文件路径和名称
System.out.println("用户选择的文件路径:"+d2.getDirectory());
System.out.println("用户选择的文件名称:"+d2.getFile());
}
}); //添加按钮到frame中 frame.add(b1);
frame.add(b2,BorderLayout.SOUTH); //设置frame最佳大小并可见
frame.pack();
frame.setVisible(true);
}
}

个人博客本文地址:https://kohler19.gitee.io/2022/04/05/java-GUI2/

个人博客:https://kohler19.gitee.io/

公众号:“愚生浅末”

最新文章

  1. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
  2. Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
  3. Word Break II
  4. Ajax+PHP+MySQL 登陆示例
  5. 关于Dijkstra最短路径算法
  6. JS回车事件,兼容目前所有浏览器
  7. 【iCore2双核心板视频教程】 AD模块(iM_AD_GP和iM_AD_SYNC)介绍及数据采集实验三
  8. bash调试执行
  9. perl 导出函数到当前名字空间
  10. POJ 2455Secret Milking Machine(二分+网络流之最大流)
  11. [STM32F429-DISCO-uCosiii]3.uCOSIII 移植
  12. [python爬虫]Requests-BeautifulSoup-Re库方案--robots协议与Requests库实战
  13. R语言学习——因子
  14. ROS-PCL点云库的安装
  15. python的对象 变量
  16. CUDA编程模型——组织并行线程2 (1D grid 1D block)
  17. (转)为什么wait(),notify()和notifyAll()必须在同步块或同步方法中调用
  18. spring ,springmvc的常用标签注解
  19. 1.2OpenCV如何扫描图像,利用查找表和计时
  20. Linux内存分配机制之伙伴系统和SLAB

热门文章

  1. C/C++读取SEGY文件(三)
  2. vue/cli项目添加外部js文件的一个方法
  3. Prepared SQL 性能测试
  4. 昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!
  5. CentOS7 yum源修改为阿里,配置阿里epel源
  6. logging 日志配用
  7. 说说UI自动化中的PO模式
  8. [SPDK/NVMe存储技术分析]005 - DPDK概述
  9. .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
  10. 【ASP.NET Core】MVC模型绑定:非规范正文内容的处理