从Graphics2D开始

在Java中绘制矩形的核心工具是java.awt.Graphics2D类,它是Graphics类的扩展,提供了更丰富的绘图功能,要绘制矩形,首先需要获取Graphics2D对象,通常通过重写组件的paintComponent方法实现,在继承JPanel的自定义面板中,可以通过super.paintComponent(g)清除画布后,将g强制转换为Graphics2D对象进行绘制。
基础绘制主要使用两个方法:drawRect(int x, int y, int width, int height)和fillRect(int x, int y, int width, int height),前者绘制矩形边框,后者填充矩形内部,参数中,x和y表示矩形左上角的坐标,width和height分别表示矩形的宽度和高度。g.drawRect(50, 50, 200, 100)会在坐标(50,50)处绘制一个200×100的矩形边框。
自定义样式:颜色与边框的灵活设置
默认绘制的矩形是黑色边框、无填充,通过Graphics2D的样式设置方法,可以轻松调整颜色、线宽和填充效果,设置边框颜色使用setColor(Color c),填充颜色使用setFillPaint(Paint paint)(需配合fillRect使用)。g.setColor(Color.RED)将边框设为红色,g.setPaint(Color.BLUE)将填充设为蓝色。
线宽调整通过setStroke(Stroke s)实现,需创建BasicStroke对象。g.setStroke(new BasicStroke(3))将线宽设为3像素,new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)还可设置线帽和连接处的圆角效果,若需虚线,可通过BasicStroke的构造函数传入浮点数组,如new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, new float[]{5, 5}),表示5像素实线、5像素虚线的循环。

动态绘制:交互式矩形创建
除了静态绘制,Java还可实现交互式矩形绘制,例如通过鼠标事件实时创建矩形,这需要添加鼠标监听器(MouseListener和MouseMotionListener),记录鼠标按下时的起始点(startX、startY)和拖动时的当前点(currentX、currentY),在mouseDragged事件中动态计算矩形宽高并重绘画布。
示例步骤:
- 定义类变量
private int startX, startY, currentX, currentY; - 添加
MouseListener,在mousePressed中记录起始点; - 添加
MouseMotionListener,在mouseDragged中更新当前点并调用repaint(); - 在
paintComponent中,根据起始点和当前点绘制矩形(需注意宽高取绝对值,避免负值)。
这样,用户通过鼠标拖动即可实时绘制矩形,提升交互体验。
进阶技巧:圆角与多矩形叠加

若需绘制圆角矩形,可使用Graphics2D的draw(RoundRectangle2D.Double rect)或fill(RoundRectangle2D.Double rect)方法,其中RoundRectangle2D.Double对象需指定左上角坐标、宽高、圆角弧宽和弧高。new RoundRectangle2D.Double(50, 50, 200, 100, 20, 20)会绘制一个圆角半径为20的矩形。
当需要绘制多个矩形或叠加图形时,可在paintComponent中按顺序调用绘制方法,后绘制的图形会覆盖先绘制的部分,若需透明效果,可使用AlphaComposite设置透明度,例如g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f))会使后续绘制半透明。
通过以上方法,Java可灵活实现从基础到复杂的矩形绘制,结合事件处理和样式自定义,满足GUI开发中的多样化需求。

















