------------------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
void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public
void run() {

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
void paint(Graphics arg0) {

System.out.println("1---paint()");

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

//则只会输出 1---paint(),其他三个方法均不会被调用

super.paint(arg0);

}

 
 

//paintBorder() 方法是当前组件绘制自身的边缘(边框)所调用的方法

@Override

protected
void paintBorder(Graphics arg0) {

System.out.println("3---paintBorder()");

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

//则不会执行绘制边框操作

super.paintBorder(arg0);

}

 
 

//paintChildren() 方法是当前组件绘制其中的子对象所调用的方法

@Override

protected
void paintChildren(Graphics arg0) {

System.out.println("4---paintChildren()");

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

//则运行时当前组件的子对象不会被显示

//(本例:当前组件是 contentPane,子对象:JLabel)

super.paintChildren(arg0);

}

 
 

//paintComponent() 方法是当前组件绘制自身所调用的方法

@Override

protected
void paintComponent(Graphics arg0) {

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绘图机制的更多相关文章

  1. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  2. SurfaceView绘图机制

    一.为什么需要用SurfaceView绘图,不直接继承View绘图 它的特性是:可以在主线程之外的线程中向屏幕绘图上.这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度.在游戏开发 ...

  3. Android群英传笔记——第六章:Android绘图机制与处理技巧

    Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...

  4. Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美

    Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...

  5. Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

    Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...

  6. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  7. Android绘图机制(一)——自定义View的基础属性和方法

    Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目 ...

  8. swing线程机制

    在介绍swing线程机制之前,先介绍一些背景概念. 背景概念 同步与异步:     同步是指程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被阻塞(block)直到请求完成 ...

  9. 编写Java程序,使用Swing事件处理机制实现用户登录和英雄信息显示

    返回本章节 返回作业目录 需求说明: 使用Swing事件处理机制实现用户登录和英雄信息显示 实现思路: 创建LoginView类,该类用于显示登录界面,为登录按钮添加ActionListener事件, ...

随机推荐

  1. JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发

    JAX-RS Java API forRESTful WebServices旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架.是一个J ...

  2. js 读取json数据 挖坑

    一般遇到后台给的json数据格式不对 比如key和value都是单引号. 但真正的json 的key和value都是双引号,必须双引号才能取值. 再来一个例子看看 var test = [{ &quo ...

  3. C#中DEV控件,XtraTabPage得小方法

    DEV控件设计窗体程序,XtraTabPage用到的小方法,欢迎大家评论,分享技术! //DEV中的选项卡 private bool TabCtlPageExist(string pageName) ...

  4. 2016 ACM-ICPC EC-Final题解

    题目链接 A. Number Theory Problem 题意:给你一个数N,求形如2k-1且小于2N的数中有多少能被7整除. 解法:观察二进制位找规律,答案是N/3. #include<bi ...

  5. 转载:maven依赖范围

    其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath(注意是与classpath)的关系. 主要的是三种依赖关系如下:1.compile: 默认编译依赖范围.对于编译,测试,运行 ...

  6. BZOJ2784: [JLOI2012]时间流逝

    BZOJ2784: [JLOI2012]时间流逝 https://lydsy.com/JudgeOnline/problem.php?id=2784 分析: 挺有意思的一道题. 注意到状态数是\(P( ...

  7. LeetCode 362. Design Hit Counter

    原题链接在这里:https://leetcode.com/problems/design-hit-counter/description/ 题目: Design a hit counter which ...

  8. 前端项目使用module.exports文件一定要Webpack编译吗?请问gulp可以编译这种文件吗

    import引入类似这种文件,一定要用webpack去编译吗 module.pxports 是CMD规范的一个全局函数,功能是当前模块对外提供接口.require可以直接使用这个接口.例子: echo ...

  9. Yii查看(输出)当前页面执行的sql语句(log记录)

    在Yii框架下查看当前页面执行的所有sql语句的方法,主要是通过配置相关文件来达到调试sql的目的,具体方法如下: (1)修改 index.php 开启调试模式 在 index.php 文件内增加如下 ...

  10. C++对C语言的拓展(3)—— 默认参数和占位参数

    通常情况下,函数在调用时,形参从实参那里取得值.对于多次调用同一函数同一 实参时,C++给出了更简单的处理办法.给形参以默认值,这样就不用从实参那里取值了. 1.单个默认参数 若填写参数,使用你填写的 ...