疯狂JAVA讲义---第十一章(下):AWT编程-高级应用

Java GUI-AWT Java GUI-AWT sf2gis@163.com 2015年12月29日   1 目标:提供Java的WriteOnce,RunAnywhere的目标,提供跨平台的GUI。 2 原理:针对不同平台调用OS底层的GUI,封装统一API。 但是对于平台特有的组件无法实现Java的跨平台目标,并且Java使用JNI调用底层GUI的方式也给跨平台带来不便。于是Java在后续的GUI中使用 阅读详情

这章我们主要来讨论下用awt包画图,位图处理,使用剪贴板等,由于这些东西比较有套路,我主要以代码形式讲解。

绘图主要是利用Component的三个方法,

paint(Graphics g):绘制组件的外观

update(Graphic g):调用paint方法刷新外观

repaint():调用update

  1. public class SimpleDraw
  2. {
  3.     private final String RECT_SHAPE = "rect";
  4.     private final String OVAL_SHAPE = "oval";
  5.     private Frame f = new Frame("简单绘图");
  6.     private Button rect = new Button("绘制矩形");
  7.     private Button oval = new Button("绘制圆形");
  8.     private MyCanvas drawArea = new MyCanvas();
  9.     //用于保存需要绘制什么图形的字符串属性
  10.     private String shape = "";
  11.     public void init()
  12.     {
  13.         Panel p = new Panel();
  14.         rect.addActionListener(new ActionListener()
  15.         {
  16.             public void actionPerformed(ActionEvent e)
  17.             {
  18.                 //设置shape属性为RECT_SHAPE
  19.                 shape = RECT_SHAPE;
  20.                 //重画MyCanvas对象,即调用它的update方法
  21.                 drawArea.repaint();
  22.             }
  23.         });
  24.         oval.addActionListener(new ActionListener()
  25.         {
  26.             public void actionPerformed(ActionEvent e)
  27.             {
  28.                 //设置shape属性为OVAL_SHAPE
  29.                 shape = OVAL_SHAPE;
  30.                 //重画MyCanvas对象,即调用它的update方法
  31.                 drawArea.repaint();
  32.             }
  33.         });
  34.         p.add(rect);
  35.         p.add(oval);
  36.         drawArea.setPreferredSize(new Dimension(250 , 180));
  37.         f.add(drawArea);
  38.         f.add(p , BorderLayout.SOUTH);
  39.         f.pack();
  40.         f.setVisible(true);
  41.     }
  42.     public static void main(String[] args) 
  43.     {
  44.         new SimpleDraw().init();
  45.     }
  46.     class MyCanvas extends Canvas
  47.     {
  48.         //重写Canvas的paint方法,实现绘画
  49.         public void paint(Graphics g)
  50.         {
  51.             Random rand = new Random();
  52.             if (shape.equals(RECT_SHAPE))
  53.             {
  54.                 //设置画笔颜色
  55.                 g.setColor(new Color(220, 100, 80));
  56.                 //随机地绘制一个矩形框
  57.                 g.drawRect( rand.nextInt(200) , rand.nextInt(120) , 40 , 60);
  58.             }
  59.             if (shape.equals(OVAL_SHAPE))
  60.             {
  61.                 //设置画笔颜色
  62.                 g.setColor(new Color(80, 100, 200));
  63.                 //随机地绘制一个矩形框
  64.                 g.fillOval( rand.nextInt(200) , rand.nextInt(120) , 50 , 40);
  65.             }
  66.         }
  67.     }
  68. }

下面讲个利用BufferedImage实现图形缓冲的例子,eg

  1. public class HandDraw
  2. {
  3.     //画图区的宽度 
  4.     private final int AREA_WIDTH = 500;
  5.     //画图区的高度
  6.     private final int AREA_HEIGHT = 400;
  7.     //下面的preX、preY保存了上一次鼠标拖动事件的鼠标座标
  8.     private int preX = -1;
  9.     private int preY = -1;
  10.     //定义一个右键菜单用于设置画笔颜色
  11.     PopupMenu pop = new PopupMenu();
  12.     MenuItem redItem = new MenuItem("红色");
  13.     MenuItem greenItem = new MenuItem("绿色");
  14.     MenuItem blueItem = new MenuItem("蓝色");
  15.     //定义一个BufferedImage对象
  16.     BufferedImage image = new BufferedImage(AREA_WIDTH , AREA_HEIGHT , 
  17.         BufferedImage.TYPE_INT_RGB);
  18.     //获取image对象的Graphics
  19.     Graphics g = image.getGraphics();
  20.     private Frame f = new Frame("简单手绘程序");
  21.     private DrawCanvas drawArea = new DrawCanvas();
  22.     //用于保存需要绘制什么图形的字符串属性
  23.     private String shape = "";
  24.     //用于保存画笔颜色
  25.     private Color foreColor = new Color(255, 0 ,0);
  26.     public void init()
  27.     {
  28.         //定义右键菜单的事件监听器。
  29.         ActionListener menuListener = new ActionListener()
  30.         {
  31.             public void actionPerformed(ActionEvent e)
  32.             {
  33.                 if (e.getActionCommand().equals("绿色"))
  34.                 {
  35.                     foreColor = new Color(0 , 255 , 0);
  36.                 }
  37.                 if (e.getActionCommand().equals("红色"))
  38.                 {
  39.                     foreColor = new Color(255 , 0 , 0);
  40.                 }
  41.                 if (e.getActionCommand().equals("蓝色"))
  42.                 {
  43.                     foreColor = new Color(0 , 0 , 255);
  44.                 }
  45.             }
  46.         };
  47.         //为三个菜单添加事件监听器
  48.         redItem.addActionListener(menuListener);
  49.         greenItem.addActionListener(menuListener);
  50.         blueItem.addActionListener(menuListener);
  51.         //将菜单项组合成右键菜单
  52.         pop.add(redItem);
  53.         pop.add(greenItem);
  54.         pop.add(blueItem);
  55.         //将右键菜单添加到drawArea对象中
  56.         drawArea.add(pop);
  57.         //将image对象的背景色填充成白色
  58.         g.fillRect(0 , 0 ,AREA_WIDTH , AREA_HEIGHT);
  59.         drawArea.setPreferredSize(new Dimension(AREA_WIDTH , AREA_HEIGHT));
  60.         //监听鼠标移动动作
  61.         drawArea.addMouseMotionListener(new MouseMotionAdapter()
  62.         {
  63.             //实现按下鼠标键并拖动的事件处理器
  64.             public void mouseDragged(MouseEvent e)
  65.             {
  66.                 //如果preX和preY大于0
  67.                 if (preX > 0 && preY > 0)
  68.                 {
  69.                     //设置当前颜色
  70.                     g.setColor(foreColor);
  71.                     //绘制从上一次鼠标拖动事件点到本次鼠标拖动事件点的线段
  72.                     g.drawLine(preX , preY , e.getX() , e.getY());
  73.                 }
  74.                 //将当前鼠标事件点的X、Y座标保存起来
  75.                 preX = e.getX();
  76.                 preY = e.getY();
  77.                 //重绘drawArea对象
  78.                 drawArea.repaint();
  79.             }
  80.         });
  81.         //监听鼠标事件
  82.         drawArea.addMouseListener(new MouseAdapter()
  83.         {
  84.             //实现鼠标松开的事件处理器
  85.             public void mouseReleased(MouseEvent e)
  86.             {
  87.                 //弹出右键菜单
  88.                 if (e.isPopupTrigger())
  89.                 {
  90.                     pop.show(drawArea , e.getX() , e.getY());
  91.                 }
  92.                 //松开鼠标键时,把上一次鼠标拖动事件的X、Y座标设为-1。
  93.                 preX = -1;
  94.                 preY = -1;
  95.             }
  96.         });
  97.         f.add(drawArea);
  98.         f.pack();
  99.         f.setVisible(true);
  100.     }
  101.     public static void main(String[] args) 
  102.     {
  103.         new HandDraw().init();
  104.     }
  105.     class DrawCanvas extends Canvas
  106.     {
  107.         //重写Canvas的paint方法,实现绘画
  108.         public void paint(Graphics g)
  109.         {
  110.             //将image绘制到该组件上
  111.             g.drawImage(image , 0 , 0 , null);
  112.         }
  113.     }
  114. }

 

 

 

由于以上每次画都刷全图,闪烁还是不能避免,其实只要刷画笔的周围就可以实现基本不闪的效果,利用Swing的JPanel组件等都已经实现了双缓冲了

下面再讲下利用ImageIO来对图片进行读写,在windows现在支持这几种图片格式
BMP
jpeg
bmp
wbmp
gif
JPG
png
jpg
JPEG
WBMP

常用的基本都支持了,举个使用实例eg

  1. public class ZoomImage
  2. {
  3.     //下面两个常量设置缩小后图片的大小
  4.     private final int WIDTH = 80;
  5.     private final int HEIGHT = 60;
  6.     //定义个BuffedImage对象,用于保存缩小后的位图
  7.     BufferedImage image = new BufferedImage(WIDTH , HEIGHT , 
  8.         BufferedImage.TYPE_INT_RGB);
  9.     Graphics g = image.getGraphics();
  10.     public void zoom()throws Exception
  11.     {
  12.         //读取原始位图
  13.         Image srcImage = ImageIO.read(new File("image/board.jpg"));
  14.         //将原始位图缩小后绘制到image图象中
  15.         g.drawImage(srcImage , 0 , 0 , WIDTH , HEIGHT , null);
  16.         //将image图象文件输出到磁盘文件中。
  17.         ImageIO.write(image , "jpeg" , 
  18.             new File(System.currentTimeMillis() + ".jpg"));
  19.     }
  20.     public static void main(String[] args)throws Exception
  21.     {
  22.         new ZoomImage().zoom();
  23.     }
  24. }

最后简单讲下剪贴板的使用,主要区别下系统剪贴板和本地剪贴板的区别,本地的复制只能在jvm里使用。eg

  1. public class SimpleClipboard
  2. {
  3.     private Frame f = new Frame("简单的剪贴板程序");
  4.     //获取系统剪贴板
  5.     private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
  6.     //下面是创建本地剪贴板的代码
  7.     //Clipboard clipboard = new Clipboard("cb"); 
  8.     //用于复制文本的文本框
  9.     private TextArea jtaCopyTo = new TextArea(5,20); 
  10.     //用于粘贴文本的文本框
  11.     private TextArea jtaPaste = new TextArea(5,20);
  12.     private Button btCopy = new Button("复制"); //拷贝按钮
  13.     private Button btPaste = new Button("粘贴"); //粘贴按钮 
  14.     public void init()
  15.     {
  16.         Panel p = new Panel();
  17.         p.add(btCopy);
  18.         p.add(btPaste);  
  19.         btCopy.addActionListener(new ActionListener()
  20.         {
  21.             public void actionPerformed(ActionEvent event)
  22.             {
  23.                 //将一个多行文本域里的字符串封装成StringSelection对象
  24.                 StringSelection contents=new StringSelection(jtaCopyTo.getText());
  25.                 //将StringSelection对象放入剪贴板
  26.                 clipboard.setContents(contents, null); 
  27.             }
  28.         });
  29.         btPaste.addActionListener(new ActionListener()
  30.         {
  31.             public void actionPerformed(ActionEvent event)
  32.             {
  33.                 //如果剪贴板中包含stringFlavor内容
  34.                 if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor))
  35.                 {
  36.                     try
  37.                     {
  38.                         //取出剪贴板中stringFlavor内容
  39.                         String content = (String)clipboard.getData(DataFlavor.stringFlavor);
  40.                         jtaPaste.append(content);
  41.                     }
  42.                     catch (Exception e)
  43.                     {
  44.                         e.printStackTrace();
  45.                     }
  46.                 }
  47.             }
  48.         }); 
  49.         //创建一个水平排列的Box容器
  50.         Box box = new Box(BoxLayout.X_AXIS);
  51.         //将两个多行文本域放在Box容器中
  52.         box.add(jtaCopyTo);
  53.         box.add(jtaPaste);
  54.         //将按钮所在Panel、Box容器添加到Frame窗口中
  55.         f.add(p,BorderLayout.SOUTH); 
  56.         f.add(box,BorderLayout.CENTER);
  57.         f.pack();
  58.         f.setVisible(true);
  59.     }
  60.     public static void main(String[] args)
  61.     {
  62.         new SimpleClipboard().init(); 
  63.     }
  64. }

 

疯狂JAVA讲义-11 疯狂JAVA讲义-11,很好的JAVA入门材料,值得推荐 疯狂 JAVA 讲义 李刚 立即下载

相关推荐

UniApp消息推送进阶:不用插件实现动态语音播报(含保活策略)

本文详细介绍了在UniApp中实现动态语音播报的进阶方案,无需依赖第三方插件。核心采用透传消息传递动态数据,结合本地TTS引擎合成语音,并针对不同安卓厂商提供了深度通道配置与差异化保活策略,有效解决了App退至后台或被清理后语音播报失效的难题。

weixin_29224309的博客 486

setSize()和setPreferredSize(new Dimension())使用小结

//setSize()和setPreferredSize(new Dimension())使用小结 import javax.swing.JFrame; import java.awt.Dimension; public class Test2 extends JFrame {    public static void main(String[]args)    {

u013260551的专栏 1万+

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6416

[疯狂Java讲义精粹] 第十一章|多线程

1. 线程概述 0. 一个任务通常就是一个程序, 每个运行中的程序就是一个进程. 当一个程序运行时, 内部可能包含了多个顺序执行流, 每个顺序执行流就是一个线程.  1. 进程是系统进行资源分配和调度的一个独立单位. 三个特征:  独立性: 进程可以拥有自己独立的资源, 每个进程都有自己独立的地址空间. 没有经过进程本身允许的情况下, 一个用户进程不可以直接访问其他进程的地址

180斤的专栏 1667

VLA-JEPA:具身智能中潜空间世界模型的工程落地实践

世界模型是具身智能实现环境理解与因果推演的核心基础,其本质是在状态空间中建模‘动作→结果’的动力学规律。传统基于像素或文本的世界模型因高维、非平稳、弱语义等缺陷,在真实机器人场景中鲁棒性差、部署成本高。JEPA(联合嵌入预测架构)通过构建物理约束的潜空间,将视觉-语言-动作(VLA)信号统一编码为低维、可微、可解释的状态表征,显著提升模型对抖动、遮挡、光照突变等干扰的适应能力,并支持实时闭环控制。该范式已在UR5e、Franka等多构型机械臂及Jetson边缘平台完成实测验证,成为VLA系统从实验室走向产线

weixin_34357928的博客 336

实战指南:用Python实现ONVIF WS-Discovery设备发现(附完整代码)

本文提供了一份详细的实战指南,介绍如何使用Python实现基于ONVIF标准的WS-Discovery设备发现协议。文章深入解析了协议原理、网络通信模型,并提供了完整的代码实现,帮助开发者快速构建智能安防和物联网应用中的设备自动发现工具,有效提升网络设备集成与管理的效率。

chair的专栏 1113

疯狂JAVA讲义---第十一章(上):AWT编程-布局管理器

从今天开始的这几天,我主要讲java的GUI编程。图形用户界面(Graphics user interface, GUI)是指用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统运行的结果以图形方式显示给用户的技术。由于用户界面设计质量的好坏直接影响软件的使用,Java语言对此也十分重视,几乎在JDK每个新的版本中,都增加了一定的GUI程

TERRY的技术日志 2655

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.csdn.net/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2919

java俄罗斯方块简单代码_Java简易俄罗斯方块

目前学到Swing第二章,这两天没有学新知识,写了个俄罗斯方块。写之前想不好怎么实现,找来别人的程序看了一下,再加上自己的想法,做了下面这个半成品,接下来可以加上各种菜单、按钮贴图等美化,都是些锦上添花的动作,繁琐但不难。我觉得写俄罗斯方块,难点在于如何将方块的形状(七种)、状态(四种翻转)、动作(左、右、下落)等提炼成数组。 这里采用四维数组来表示每一种方块:【种类】【翻转】【X坐标】【Y坐标】...

weixin_29819639的博客 1504

开关电源拓扑结构选型指南:从Buck到Full-Bridge的实战解析

本文为硬件工程师提供了开关电源拓扑结构的实战选型指南。文章系统解析了从基础的Buck、Boost、Buck-Boost,到隔离型的Flyback、Forward,再到中高功率的半桥、全桥以及高效率的LLC谐振拓扑的适用场景与核心特点。通过对比分析各拓扑的优缺点,并结合输入输出电压、功率等级、成本与效率等关键参数,给出了清晰的选型决策路径,帮助工程师根据具体项目需求选择最合适的电源“骨架”。

weixin_29306261的博客 106

一种基于频域滤波法消除干扰项与角谱法重构技术的数字全息显微台阶形貌测量实例分析

一种基于频域滤波法消除干扰项与角谱法重构技术的数字全息显微台阶形貌测量实例分析

简单光学 2034

《疯狂java讲义》Java AWT图形化编程中文显示

java 桌面端应用开发

365

基于YOLOv8的城市违建识别系统:从数据集构建到UI界面实现

YOLOv8是Ultralytics公司于2023年推出的最新一代YOLO(You Only Look Once)系列目标检测算法。更高效的骨干网络设计改进的锚框机制更精确的损失函数支持分类、检测、分割等多任务YOLOv8特别适合像违建识别这样的实时检测任务,能够在保持高精度的同时实现快速推理。

YOLO 673

《疯狂java讲义》读后感

《疯狂java讲义·第三版》,全书共851页,18章。 目录如下: 第1章 Java语言概述与开发环境 第2章 理解面向对象 第3章 数据类型和运算符 第4章 流程控制与数组 第5章 面向对象(上) 第6章 面向对象(下) 第7章 Java基础类库 第8章 Java集合 第9章 泛型 第10章 异常处理 第11章 AWT编程 第12章 Swing编程 第13章 MySQL数据库与JDBC...

aihuanshang9340的博客 376

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[笔记] 疯狂JAVA讲义(第3版)第11章 AWT编程

第11章 AWT编程 AWT(Abstract Window Toolkit),它是Sun最早提供的GUI库,这个库提供了一些基本功能。 后来又提供了Swing库。 11.1 GUI(图形用户界面)和AWT @Swing是建立在AWT基础上的,他的事件处理机制使用的是AWT的。 和AWT相关的类放在java.awt包及其子包中,AWT编程有两个基类:Component和MenuComponent。...

一只大鸽子的博客 639

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[疯狂Java]AWT:绘图、动画

1. 绘图三方法:     1) AWT绘图的核心就是三个方法:paint、update、repaint;     2) 三者的调用关系是repaint调用update,update调用paint;     3) 首先看paint,就是画出一个组件的外观,比如一个按钮,那就是按钮上的文字、边框、纹理、3D效果等,整个组件的外观都由paint来绘制;     4) 接下来是update,就是

Lirx_Tech的专栏 3996

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java- AWT编程-学习笔记

Java- AWT编程-学习笔记 文章目录Java- AWT编程-学习笔记1.容器 Container2.布局管理器2.1 FlowLayout2.2 BorderLayout2.3 GridLayout2.4 GridBagLayout2.5 CardLayout2.6 绝对布局2.7 BoxLayout3. AWT 常用组件3.1 基本组件3.2 Dialog(对话框)4...

xhh22900的博客 664

《疯狂Java讲义》11

1.Java使用AWT和Swing类完成图形用户界面编程。其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit)。它是最早提供的GUI库,这个GUI库提供了一些基本的功能,但是很有局限性,所以后来又提供了Swing库。 2. 所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWT编程中有两个基类:Component和MuneComponent。Component代表一个能以图形化方式显示出来,并可与用户交互的对象。例如Button代表一个按钮。而...

allein_STR的博客 329

【Java】AWT和Swing概述

阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了1、JAVA面试核心知识整理(PDF):包含JVMJAVA集合JAVA多线程并发,JAVA基础,Spring原理微服务,Netty与RPC,网络,日志,ZookeeperKafkaRabbitMQ,Hbase,MongoDB设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。2、Redis学习笔记及学习思维脑图。

a1901149的博客 1509

[疯狂Java笔记]AWT容器简介

1. 容器类型的主要继承结构:     1) Container容器类底下主要有三种容器子类,分别是Window、Panel和ScrollPane;     2) Window就是最常见的顶级窗口,即一般应用程序最下层的那个框架窗口,只不过这里的Window所代表的顶级窗口非常简单,没有标题、空白且不可拖放和伸缩,而Window的子类Frame则具有标题并允许拖放改变位置且可以调整窗口大小,因

Lirx_Tech的专栏 1421

[疯狂Java]AWT:拖放功能、拖放目标

1. 拖放操作:     1) 是GUI界面提供的一种基本功能,即将一个GUI目标(一个图标、一段选中的文字等)通过鼠标拖动到另一个地方并释放来完成某种操作;     2) 最常见的就是利用拖放来完成复制、剪切的工作,而通过将一个文件的图标拖动到一个程序的图标来打开该文件也是一种常见的拖放操作;     3) 通过拖放操作实施的复制、剪切通常称为复制、移动(例如把一个文件拖到另一个文件夹中可

Lirx_Tech的专栏 2109

[疯狂Java]AWT拖放操作:拖放源

1. 拖放操作的介质:     1) 拖放操作的目的:就是为了程序之间的数据交流,更重要的是程序和操作系统之间的交流,因此如果拖放操作只在Java程序之间进行基本上是毫无意义的,拖放操作的初衷就是为了让操作系统上各程序之间可以进行交流,其中最最主要的形式就是程序和操作系统之间的数据交流;     2) 之前的示例就是拿操作系统的资源管理器作为拖放源,从那里拖动文件到Java程序中,很显然操作系

Lirx_Tech的专栏 1173

java时间比较_Java入门:《疯狂java讲义》

今日推荐:李刚的《疯狂java讲义》。李刚《疯狂java讲义》这是一本知名的讲解java的书,当前已更新到第五版,也就是2019年4月出版的新版本。从2008年6月第一版至今已经有十多年的时间了,是一本经得住时间考验的书。这本书(第五版)的主要特点是涵盖了自java8之后的最新长期支持版java11。相比与其他比较权威的java教程,比如java编程思想(最新为英文版(On Java)第五版,ja...

weixin_39693193的博客 277

[疯狂Java笔记]AWT:CardLayout卡堆布局

1. CardLayout——卡堆布局:     1) 顾名思义就是一堆卡片,只有最上面的那张卡片可见,每张卡片存放一个组件,只有最上面的那个组件才是可见的,底下的都会被遮盖住;     2) 构造器:          i. 默认无参构造器:CardLayout();          ii. 指定和边界的间隔:CardLayout(int hgap, int vgap); // 指定了

Lirx_Tech的专栏 915

[疯狂Java笔记]AWT组件和容器的概念

1. 组件和容器:     1) 所有的图形元素都可以看成一个图形组件,比如一个按钮、编辑框,甚至是一个窗口都是一个图形组件,这里就简称组件;     2) 而容器在Java图形界面中是一种特殊的组件,顾名思义它就是用来存放其它组件的,比如上面所说的窗口就是一种容器组件,在它里面可以存放按钮、编辑框等组件,这些成为他的子组件;     3) 当然容器里也可以存放其它容器,即嵌套;

Lirx_Tech的专栏 1901

java组件awt_[疯狂Java笔记]AWT:常用组件

1. 常用组件:1) 这里先不演示Canvas(画布,在后面绘图中会讲到)、Scrollbar(滚条)、ScrollPane|Panel|Frame(之前讲过了);2) 按钮类:i. Button:非常常见的单击按钮,Button(String Label); // 需要按钮上的文本标签ii. Checkbox:复选框;iii. CheckboxGroup:用该组件包裹复选框可使复选框边单选框;!...

weixin_42144201的博客 454
上一篇: 疯狂JAVA讲义---第十一章(中):AWT编程-常用组件和事件处理
下一篇: JAVA程序员面试题汇总
terryzero
博客等级 码龄19年 700粉丝 232原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值