Swing绘图机制
------------------siwuxie095
工程名:TestSwingPaintMethod
包名:com.siwuxie095.swingpaint
类名:SwingPaintMethod.java(主类)、MyPanel.java
工程结构目录如下:

SwingPaintMethod.java(主类):
|
package com.siwuxie095.swingpaint; import java.awt.BorderLayout; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.LineBorder; public class SwingPaintMethod extends JFrame { //将原本声明的 JPanel 注释掉,改为 MyPanel //private JPanel contentPane; private MyPanel contentPane;
private JLabel lblNewLabel; /** * Launch the application. */ public static EventQueue.invokeLater(new Runnable() { public try { SwingPaintMethod frame = new SwingPaintMethod(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public SwingPaintMethod() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300);
//将原本的实例化方式注释掉,改为 MyPanel() //contentPane = new JPanel(); contentPane = new MyPanel();
//将 contentPane 的背景设置成 contentPane.setBackground(Color.RED); contentPane.setBorder(new LineBorder(Color.BLUE, 5));
contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane);
lblNewLabel = new JLabel("This is a label"); lblNewLabel.setFont(new Font("幼圆", Font.BOLD, 24)); contentPane.add(lblNewLabel, BorderLayout.CENTER); } } |
MyPanel.java:
|
package com.siwuxie095.swingpaint; import java.awt.Graphics; import javax.swing.JPanel; //通过 Swing 的绘图机制实现 UI 元素的定制和 UI 外观的调整 //MyPanel 继承自 JPanel public class MyPanel extends JPanel {
//覆盖 JPanel 的四个方法,右键->Source->Override/Implement Methods->JComponent //paint()、paintComponent()、paintBorder()、paintChildren()
//paint() 方法是当前组件被更新时系统自动调用的方法 //paint() 会自动调用 paintComponent()、paintBorder()、paintChildren() //即 @Override public System.out.println("1---paint()"); //如果将 super.paint(arg0); 注释 //则只会输出 1---paint(),其他三个方法均不会被调用 super.paint(arg0); } //paintBorder() 方法是当前组件绘制自身的边缘(边框)所调用的方法 @Override protected System.out.println("3---paintBorder()"); //如果将 super.paintBorder(arg0); 注释 //则不会执行绘制边框操作 super.paintBorder(arg0); } //paintChildren() 方法是当前组件绘制其中的子对象所调用的方法 @Override protected System.out.println("4---paintChildren()"); //如果将 super.paintChildren(arg0); 注释 //则运行时当前组件的子对象不会被显示 //(本例:当前组件是 contentPane,子对象:JLabel) super.paintChildren(arg0); } //paintComponent() 方法是当前组件绘制自身所调用的方法 @Override protected System.out.println("2---paintComponent()"); //如果将 super.paintComponent(arg0); 注释 //则当前组件本身将不会被绘制 super.paintComponent(arg0); }
} |
修改 SwingPaintMethod.java(主类) 中的 contentPane 的
声明与实例化方式:


将
contentPane 的 background 属性设定为 红色
将 contentPane 的 border 属性设定为 LineBorder,并把颜色
(Color)设为 蓝色,边框厚度(Thickness)设为 5
「注意:操作在
Design 中完成,代码是自动生成的」

在
contentPane 的中间添加一个 JLabel,并将文本(text)
改为:This is a label,Rename 为:label,简单设置其属性

在
MyPanel.java 中覆盖 JPanel 的四个方法,右键->Source
->Override/Implement Methods->JComponent
(1)paint()
(2)paintComponent()
(3)paintBorder()
(4)paintChildren()
准备完毕,运行程序:


此时,如果将窗体放大
或
缩小,系统会连续循环调用这 4 个方法:


(1)如果将 super.paint(arg0); 注释

运行程序:所有设置都没有生效


(2)如果将 super.paintComponent(arg0); 注释

运行程序:contentPane 的背景色没有生效


(3)如果将 super.paintBorder(arg0); 注释

运行程序:contentPane 的边框没有生效


(4)如果将 super.paintChildren(arg0); 注释

运行程序:JLabel 的设置没有生效


【made by siwuxie095】
Swing绘图机制的更多相关文章
- Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧
第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...
- SurfaceView绘图机制
一.为什么需要用SurfaceView绘图,不直接继承View绘图 它的特性是:可以在主线程之外的线程中向屏幕绘图上.这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度.在游戏开发 ...
- Android群英传笔记——第六章:Android绘图机制与处理技巧
Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...
- Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...
- Android绘图机制(一)——自定义View的基础属性和方法
Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目 ...
- swing线程机制
在介绍swing线程机制之前,先介绍一些背景概念. 背景概念 同步与异步: 同步是指程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被阻塞(block)直到请求完成 ...
- 编写Java程序,使用Swing事件处理机制实现用户登录和英雄信息显示
返回本章节 返回作业目录 需求说明: 使用Swing事件处理机制实现用户登录和英雄信息显示 实现思路: 创建LoginView类,该类用于显示登录界面,为登录按钮添加ActionListener事件, ...
随机推荐
- 解决mysql登录报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
今天在安装一个压缩包mysql-5.7.19时,碰到了一系列问题,现将这些问题罗列出来: 一. ERROR 2003 (HY000): Can't connect to MySQL server o ...
- 达观数据分析平台架构和Hive实践——TODO
转自: http://www.infoq.com/cn/articles/hadoop-ten-years-part03 编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对 ...
- 原生js实现用鼠标画图
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- React native 开发工具 VSCode
1.VSCODE下载地址:先下载VSCode软件 2.代码提示功能: 打开 VSCode ,然后 按住键盘 command+p,然后在vscode上面输入框 输入: "ext install ...
- ElasticSearch_学习_00_资源帖
一.官方资料 1.Elasticsearch 权威指南(中文版) 二.精选资料 1. 全文搜索引擎 Elasticsearch 入门教程-阮一峰 2. 三.参考资料
- html5视频video积累
又是好几个月没有写东西,还是太懒散了~必须要教育下自己罗~ 这次做了个播放视频的移动H5,之前没有仔细玩过,好好记录下基本知识,还有遇到的一些坑,方便之后再次遇见后进行解决 一.基本 video标签在 ...
- hdu4121 poj4001 Xiangqi(模拟)
模拟题考验coding能力,一定要思路清晰,按照模块化思想,有哪些情况,需要哪些功能都要事先分析好了.高手的模拟题代码往往结构很清晰,功能模块写成函数,没有过多重复代码,让人一看便明. 方法选择的好坏 ...
- Git中从远程的分支获取最新的版本到本地方式
Git中从远程的分支获取最新的版本到本地方式如下, 如何更新下载到代码到本地,请参阅ice的博客基于Github参与eoe的开源项目指南 方式一 . 查看远程仓库 $ git remote -v eo ...
- Python学习笔记一(基础信息)
目录 输入输出 数据类型和变量 整数 浮点数 字符串 布尔值 空值 变量 常量 小结 欢迎关注我的博客我在马路边 说明:此笔记不是从零开始,在学习的过程中感觉需要记录一些比较重要和需要重复浏览的信息, ...
- 《Javascript高级程序设计》阅读记录(四):第五章 下
这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅 ...