Java中如何使用Graphics2D在Voronoi图上以字符串形式显示坐标
解决方案
你没有在缓存Voronoi图的BufferedImage中添加文本绘制逻辑,所以文字不会显示在界面和导出的png中,按照以下步骤修改即可:
修改核心绘制代码
找到你创建Graphics2D绘制黑点的代码段,添加文本绘制逻辑即可,修改后代码如下:
Graphics2D g = I.createGraphics(); // 可选:设置字体,避免中文显示异常、字体过小看不清 g.setFont(new Font("Dialog", Font.PLAIN, 12)); g.setColor(Color.BLACK); for (int i = 0; i < cells; i++) { // 原有绘制黑点逻辑保留 g.fill(new Ellipse2D.Double(px[i] - 2.5, py[i] - 2.5, 5, 5)); // 新增文本绘制:此处示例显示单元格序号,可替换为你需要的任意字符串 String label = String.valueOf(i); // 坐标偏移避免文字覆盖黑点,可根据显示效果调整偏移量 g.drawString(label, px[i] + 6, py[i] + 2); } // 新增:释放Graphics2D资源,避免内存泄漏 g.dispose();
自定义文本内容说明
如果需要给每个点配置不同的文本,可新增一个字符串数组和坐标数组对应,初始化时赋值即可:
- 新增类成员变量:
private String[] cellLabels; - 在初始化px、py的循环中给文本数组赋值:
for (int i = 0; i < cells; i++) { px[i] = rand.nextInt(size); py[i] = rand.nextInt(size); color[i] = rand.nextInt(16777215); // 此处替换为你需要的文本内容 cellLabels[i] = "区块" + i; }
- 绘制时替换
drawString的入参为:g.drawString(cellLabels[i], px[i] + 6, py[i] + 2);
注意事项
- 如果需要显示中文,字体请选择支持中文的字体,如「微软雅黑」「宋体」等,避免显示为方块
- 如果文本和区块背景色接近看不清,可先绘制一个小的白色矩形作为文本背景,再绘制黑色文字
- 文本已经绘制到BufferedImage对象
I中,无需修改原有paint方法,界面显示和导出的png都会包含文本
内容的提问来源于stack exchange,提问作者ConstructionCat
相关产品推荐
相关产品推荐

