当前位置: 首页 > 知识库问答 >
问题:

在 JavaFX 中刷新矩形

范轶
2023-03-14

在JavaFX中,我怎么能让一个矩形闪烁到视图之外。

我正在制作一个单词搜索游戏,我有一个随机chars的2D数组。我正在将此数组打印到600x600画布上,如下所示:

for (int i = 0; i < gameBoard.length; i++) {
        for (int j = 0; j < gameBoard[0].length; j++) {
            gc.fillText(String.valueOf(gameBoard[i][j]), (25 + (20 * j)), (25 + (20 * i)));
        }
    }

我也有一个正方形绘制在同一画布上,就像这样:

    gc.setFill(Color.BLACK);
    gc.fillRect((24 + (20 * colSelection)), (14 + (20 * rowSelection)), 15, 15);

这意味着我可以通过增加rowSelectioncolSelection来移动正方形。这给了:这个。

现在唯一的问题是,我需要一个矩形来闪烁,这样当选中时,下面的字母仍然可见。我该怎么做?我尝试将颜色设置为不透明,但这也会导致游戏板的其他部分变得不可见。有没有我想不出来的方法?我是JavaFX的新手,因此非常感谢您的帮助。

共有1个答案

黎征
2023-03-14

使用保存()恢复()将颜色更改回旧值或通过自己将属性设置为旧值来恢复旧值。

在黑色背景上添加白色文本的最简单方法是:

  1. 填充设置为黑色
  2. 画矩形
  3. 填充设置为白色
  4. 绘制文本

如果在您的情况下不可能,您可以在绘制文本之前绘制白色背景,然后使用<code>差

Canvas canvas = new Canvas(400, 400);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.WHITE);
gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
gc.setFill(Color.BLACK);
gc.fillText("Hello world", 30, 30);
gc.save();
gc.setGlobalBlendMode(BlendMode.DIFFERENCE);
gc.setFill(Color.WHITE);
gc.fillRect(10, 10, 100, 100);
gc.restore(); // restore old settings

// some more rendering with old settings
gc.fillRect(100, 100, 100, 100);
 类似资料:
  • 问题内容: 我正在尝试创建一个程序来模拟使用Java和JavaFX解决Rubik’s Cube的问题。该场景具有一个文本框,该文本框将以正确的方式显示计算机所做的每一步。文本框旁边有一个展开的多维数据集,其中 应 显示该多维数据集的当前状态。 问题在于,GUI只会更新以显示移动列表,并且在所有进程的最后都显示多维数据集的状态。我已经浏览了文档,该站点上的其他问题,其他站点上的其他问题,但找不到任何

  • 你好, 我有一个问题,使ListView更新“良好”。这是一个包含一堆播放列表项的播放列表。基本上,当项的样式或内容发生变化时,我希望它在ListView中发生变化。当前,我刷新了整个列表,我猜这是可行的,但它似乎是一个很差(不清楚)的解决方案对我来说(它闪烁)。有没有一种方法可以刷新/重绘一个特定的物品?我还没找到。 null

  • 你好,我有一个应用程序有警报,在用户没有响应后,我想刷新警报/再次显示它,但由于某些原因,我没有看到第二个警报,它是空的,像: 我关闭警报,如果它显示,所以我不知道为什么下一个警报是空的。包装应用;

  • 问题内容: 我有这个常见的问题,看来是这样。重置项目后,我的表格视图不会刷新我的项目。我检查了数据,这是新的数据。 我尝试了多种互联网解决方案,但没有成功。 无法重置所有列,因为它会额外增加一个空一(不知道为什么),并且调整大小会中断。 我的表不可编辑。新数据已更改。 如果更改项目的顺序并且行更改(:|),则刷新数据。 我只是没有想法。 目前,刷新代码非常简单。 同样,新数据是正确的。当我对tab

  • 我有这个共同的问题,因为它似乎是。我的表视图将不会刷新我的项目后,我重置他们。我查过资料了,是新的。 我从网上尝试了多种解决方案,但没有成功。 目前,刷新代码非常简单。 新的数据也是正确的。当我选择tableView时,它返回新的正确项。

  • 如果我想在某个任意ObservableValue已更改但基础TableView数据未更改的情况下使TableView刷新(而不调用refresh()方法),那么对提取器回调方法进行自适应是否是一个好的解决方案? 这是一个使用TableView刷新()方法的实现示例。 当之前有人问过类似的问题时,@kleopatra表示“不,永远不要使用刷新。” 我有一个底层数据没有变化的情况,只是它在TableV