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

如何在JavaFX的GridPane外围添加数织(Nonogram)游戏的线索提示边栏

实现方案

你可以通过两种常用方式实现线索边栏的添加,以下是可直接落地的修改逻辑:

方案1:嵌套布局实现(逻辑更清晰,易维护)

不改动现有棋盘GridPane的代码,在外层套BorderPane容器分别承载不同区域:

  1. 顶部区域放列线索(对应每一列的提示数字)
  2. 左侧区域放行线索(对应每一行的提示数字)
  3. 中心区域放你已经实现的棋盘网格

你可以在现有render()方法的循环代码后补充以下逻辑:

// 1. 构建列线索容器:GridPane列数和棋盘一致,每列宽度和棋盘格子同宽30px
GridPane colCluePane = new GridPane();
for (int col = 0; col < w; col++) {
    // 替换为从model中取对应列的线索列表
    List<Integer> colClues = model.getColClues(col);
    for (int k = 0; k < colClues.size(); k++) {
        Label clueLabel = new Label(colClues.get(k).toString());
        clueLabel.setPrefSize(width, width);
        clueLabel.setAlignment(Pos.CENTER);
        // 线索是从下往上排列,所以行索引倒序计算
        colCluePane.add(clueLabel, col, colClues.size() - 1 -k);
    }
}

// 2. 构建行线索容器:GridPane行数和棋盘一致,每行高度和棋盘格子同高30px
GridPane rowCluePane = new GridPane();
for (int row = 0; row < h; row++) {
    // 替换为从model中取对应行的线索列表
    List<Integer> rowClues = model.getRowClues(row);
    for (int k = 0; k < rowClues.size(); k++) {
        Label clueLabel = new Label(rowClues.get(k).toString());
        clueLabel.setPrefSize(width, width);
        clueLabel.setAlignment(Pos.CENTER);
        // 线索是从右往左排列,所以列索引倒序计算
        rowCluePane.add(clueLabel, rowClues.size() - 1 -k, row);
    }
}

// 3. 外层BorderPane组装所有区域
BorderPane root = new BorderPane();
root.setCenter(board);
root.setTop(colCluePane);
root.setLeft(rowCluePane);
// 调整边距避免元素贴边
root.setPadding(new Insets(20));

// 最后返回root而不是原来的board
return root;

方案2:扩展现有GridPane实现(对齐更方便,无需额外适配)

直接给现有棋盘GridPane拓展第0行、第0列的位置存放线索,原有棋盘格子的索引偏移1位即可:

  1. 原有添加棋盘格子的代码board.add(rec[i][j], i, j);修改为board.add(rec[i][j], i+1, j+1);
  2. 第0行的第i+1列位置放对应列的线索,第0列的第j+1行位置放对应行的线索

该方案不需要额外处理线索和棋盘的对齐问题,天然和格子一一对应。

注意事项

  • 线索Label的宽高统一设置为和棋盘格子一致的30px,可保证列/行完全对齐
  • 数织常规会每5格加一条粗分隔线,你可以在添加矩形/Label时判断索引是否为5的倍数,调整对应边的stroke宽度实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:00