7.7 2D图形
Graphics可绘制:直线、矩形、椭圆等 2D 图形
JDK1.2 后引入 Graphics2D,可强制把 Gaphics 转换为 Graphics2D
直线:Line2D
矩形:Rectangle2D
椭圆:Ellipse2D
点:Point2D
矩形float:Rectangle2D.Float
矩形double:Rectangle2D.Double
class DrawComponent extends JComponent{public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
double left = 100;
double top = 100;
double width = 200;
double height = 150;
Rectangle2D rect = new Rectangle2D.Double(left,top,width,height);
g2.draw(rect);
// 四个值分别为外框左上角坐标+外框长宽
// Ellipse2D e = new Ellipse2D.Double(left,top,width,height);
// e.setFrame(rect);
// g2.draw(e);
Ellipse2D ellipse2D = new Ellipse2D.Double(left,top,left+width,top+height);
//这一句直接是放入长方形内,长宽坐标设置失效
ellipse2D.setFrame(rect);
g2.draw(ellipse2D);
//起点坐标+终点坐标
g2.draw(new Line2D.Double(left,top,left+width,top+height));
double centerX = rect.getCenterX();
double centerY = rect.getCenterY();
double radius = 150;
Ellipse2D circle = new Ellipse2D.Double();
//中心发货
circle.setFrameFromCenter(centerX,centerY,centerX+radius,centerY+radius);
g2.draw(circle);
}
}
7.8 颜色
Graphic2D 需要先选择画笔颜色,再绘制图形。
预置颜色用法:Color.RED
自定义颜色用法:new Color(R,G,B)
系统颜色用法:SystemColor.window
线条颜色:setPaint
填充、背景色:setBackground
踩坑:JComponent不能直接setBackground,也不能在JFrame setBackground,目前试JPanel中生效
public class DrawTest {public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DrawFrame frame = new DrawFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class DrawFrame extends JFrame {
public static final int DEFAULT_WIDTH = 400;
public static final int DEFAULT_HEIGHT = 400;
public DrawFrame(){
setTitle("DrawTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
DrawPanel c = new DrawPanel();
add(c);
}
}
class DrawPanel extends JPanel{
public DrawPanel(){
setLayout(new BorderLayout());
DrawComponent c = new DrawComponent(getWidth(),getHeight());
add(c, BorderLayout.CENTER);
setBackground(Color.BLUE);
}
}
class DrawComponent extends JComponent{
public DrawComponent(int width, int height){
setSize(width, height);
}
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
double left = 100;
double top = 100;
double width = 200;
double height = 150;
Rectangle2D rect = new Rectangle2D.Double(left,top,width,height);
g2.setPaint(Color.RED);
g2.fill(rect);
g2.draw(rect);
// 四个值分别为外框左上角坐标+外框长宽
// Ellipse2D e = new Ellipse2D.Double(left,top,width,height);
// e.setFrame(rect);
// g2.draw(e);
Ellipse2D ellipse2D = new Ellipse2D.Double(left,top,left+width,top+height);
g2.setPaint(SystemColor.window);
ellipse2D.setFrame(rect);
g2.draw(ellipse2D);
//起点坐标+终点坐标
g2.draw(new Line2D.Double(left,top,left+width,top+height));
double centerX = rect.getCenterX();
double centerY = rect.getCenterY();
double radius = 150;
Ellipse2D circle = new Ellipse2D.Double();
circle.setFrameFromCenter(centerX,centerY,centerX+radius,centerY+radius);
g2.draw(circle);
}
}
系列内容:
《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述
《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)
《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参
《Java 核心技术 卷1》 笔记 第四章:类与对象
《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成
《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法
《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造
《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块
《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计
《Java 核心技术 卷1》 笔记 第五章 继承
《Java 核心技术 卷1》 笔记 第五章 继承(2)
《Java 核心技术 卷1》 笔记 第五章 继承(3)
《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法
《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString
《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型
《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组
《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射
《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用
《Java 核心技术 卷1》 笔记 第五章 继承(10)反射
《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧
《Java 核心技术 卷1》 笔记 第六章 接口和内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(4) 局部内部类和局部内部类引用方法变量分析
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(5) 匿名内部类和静态内部类
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(6) 静态代理
《Java 核心技术 卷1》 笔记 第六章 接口和内部类(7) 动态代理
《Java 核心技术 卷1》 笔记 第七章 图形程序设计
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(2)
《Java 核心技术 卷1》 笔记 第七章 图形程序设计(3)
喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。
关注公众号,互相学习:钰娘娘知识汇总