------------------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. cassandra集群环境搭建——注意seeds节点,DHT p2p集群管理难道初始化都应如此吗?

    解压cassandra的安装包后可以查看主要的配置文件,都在conf/目录下,conf/cassandra.yaml比较重要,其中需要着重注意的有以下一些配置项: cluster_name: 'TC0 ...

  2. MongoDB Wiredtiger存储引擎实现原理——Copy on write的方式管理修改操作,Btree cache

    转自:http://www.mongoing.com/archives/2540 传统数据库引擎的数据组织方式,一般存储引擎都是采用 btree 或者 lsm tree 来实现索引,但是索引的最小单位 ...

  3. java学习笔记 --- 网络编程(网络的基础知识)

    1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...

  4. java学习笔记 --- IO(1)

    1.File类:文件和目录(文件夹)路径名的抽象表示形式,把文件或者目录(文件夹)都封装成File对象 1.构造方法 File(String pathname):根据一个路径得到File对象 File ...

  5. AOP注解式拦截

    1. 自己定义的拦截注解 package com.spring.aop; import java.lang.annotation.Documented; import java.lang.annota ...

  6. JSplitPane的简单实现

    import java.awt.Color; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.J ...

  7. BZOJ3809:Gty的二逼妹子序列

    浅谈莫队:https://www.cnblogs.com/AKMer/p/10374756.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  8. js中call apply方法的使用介绍

    js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...

  9. hibernate中mysql数据交互中文乱码问题

    来源于"http://www.cnblogs.com/jiafuwei/p/4423101.html"; 修改hibernate的配置文件hibernate.cfg.xml,在配置 ...

  10. Mina APR传输与串口传输讲解---zhengli

    原文地址:Mina Transports(Apache Mina user guide Chapter6 Transport) 1.1.1.APR传输 1.1.1.1.介绍 APR (Apache P ...