You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();

自定义文本内容说明

如果需要给每个点配置不同的文本,可新增一个字符串数组和坐标数组对应,初始化时赋值即可:

  1. 新增类成员变量:private String[] cellLabels;
  2. 在初始化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;
}
  1. 绘制时替换drawString的入参为:g.drawString(cellLabels[i], px[i] + 6, py[i] + 2);

注意事项

  • 如果需要显示中文,字体请选择支持中文的字体,如「微软雅黑」「宋体」等,避免显示为方块
  • 如果文本和区块背景色接近看不清,可先绘制一个小的白色矩形作为文本背景,再绘制黑色文字
  • 文本已经绘制到BufferedImage对象I中,无需修改原有paint方法,界面显示和导出的png都会包含文本

内容的提问来源于stack exchange,提问作者ConstructionCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:06