使用 JavaFX 创建六边形字段

2023-11-30

我的目标是创建一个六边形瓷砖区域。我已经拥有一个单元矩阵,每个单元的高度都足以容纳完整的六边形图像:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class UITest extends Application {
    final private static String TILE_IMAGE_LOCATION = System.getProperty("user.dir") + File.separatorChar +"resources"+ File.separatorChar + "blueTile.png";
    final private static Image HEXAGON_IMAGE = initTileImage();

    private static Image initTileImage() {
        try {
            return new Image(new FileInputStream(new File(TILE_IMAGE_LOCATION)));
        } catch (FileNotFoundException e) {
            throw new IllegalStateException(e);
        }
    }
    public void start(Stage primaryStage) {
        int height = 4;
        int width = 6;
        GridPane tileMap = new GridPane();
        Scene content = new Scene(tileMap, 800, 600);
        primaryStage.setScene(content);

        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                ImageView tile = new ImageView(HEXAGON_IMAGE);
                GridPane.setConstraints(tile, x, y);
                tileMap.getChildren().add(tile);
            }
        }

        primaryStage.show();
    }
}

我的问题不是垂直间隙,我肯定可以通过添加 GridPane 来解决vGap()到一个合适的值。对我来说,困难是将第二行向右移动半个单元格宽度。

我尝试将两个 GridPanes 放在一起,一个包含奇数行,一个包含偶数行,目的是向其中之一添加填充,从而完全移动它。然而,据我所知,没有办法做到这一点,以及将 GridPanes 嵌套到另一个 GridPanes 中。

如何才能最好地实现每隔一排的移动?

(The image I reference in the code which is expected in the ${projectroot}/resources/ folder: blue hexagon tile )


我花了一些时间才弄清楚。我希望它有帮助。我不使用图像。它由多边形组成,您可以自定义描边和填充颜色以及宽度。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Polygon;

public class UITest extends Application {
    public void start(Stage primaryStage) {
        int height = 600;
        int width = 800;
        AnchorPane tileMap = new AnchorPane();
        Scene content = new Scene(tileMap, width, height);
        primaryStage.setScene(content);
        double size = 50,v=Math.sqrt(3)/2.0;
        for(double y=0;y<height;y+=size*Math.sqrt(3))
        {
            for(double x=-25,dy=y;x<width;x+=(3.0/2.0)*size)
            {
                Polygon tile = new Polygon();
                tile.getPoints().addAll(new Double[]{
                    x,dy,
                    x+size,dy,
                    x+size*(3.0/2.0),dy+size*v,
                    x+size,dy+size*Math.sqrt(3),
                    x,dy+size*Math.sqrt(3),
                    x-(size/2.0),dy+size*v
                });
                tile.setFill(Paint.valueOf("#ffffff"));
                tile.setStrokeWidth(2);
                tile.setStroke(Paint.valueOf("#000000") );
                tileMap.getChildren().add(tile);
                dy = dy==y ? dy+size*v : y;
            }
        }
        primaryStage.show();
    }
    public static void main(String[] args)
    {
        launch(args);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaFX 创建六边形字段 的相关文章

  • 带有地图的 JavaFX TableView 对象

    因此 我对 JavaFx TableView 进行了一些挖掘 并找到了一些针对简单情况的不错的解决方案 This article http docs oracle com javafx 2 ui controls table view ht
  • 如何在谓词中对 FilteredList 结果进行优先级排序/排名?

    我的应用程序包含一个TextField and a ListView The TextField允许用户输入搜索词来过滤内容ListView当他们打字时 过滤过程将匹配每个字段中的多个字段DataItem in the ListView如果
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta
  • JavaFX webview 不保存cookie

    我对 JavaFX 还很陌生 需要使用浏览器窗口编写应用程序 浏览器将用于登录微图库机构 fotolia 以解决登录时出现的验证码 显然 当关闭并稍后重新启动我的应用程序时 cookie 不会被保存 有没有办法在 JavaFX webvie
  • 更改在不同场景中输入的新场景中的标签文本(javafx)

    我正在尝试更改标签中的文本 该文本是在不同场景的文本字段中输入的文本 我制作了 2 个 FXML 文件 第一个包含一个文本字段和 确定 按钮 第二个包含一个标签 带有文本 标签 我的目标是在文本字段中输入文本 当我按 确定 gt 打开新场景
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • 如何在 Java FX 中以编程方式模拟箭头键按下

    我想让我的 JFX 应用程序模拟箭头键按下 当它们在 TextField 中注册时 但我不知道如何发送字符串或字节以外的任何内容 我正在想象这样的事情 static EventHandler
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • 如何在 JavaFX 中对单选按钮的最大可选复选框进行限制?

    请看下面的图片 您就会了解我的应用程序的布局 我希望能够动态选择多少CheckBox 启用下拉菜单 是可选的 固定数量 我想用这 3 个人来实现这个目标RadioButton 在垂直模式下全部 4CheckBox必须选择 不少于 在混合模式
  • JavaFx GridPane布局如何为行中的元素设置边距?

    我正在使用 GridPane 布局在我的应用程序中定位事物 我想知道如何为 row 中的元素设置边距 GridPane setConstraints chip5 1 1 1 1 HPos RIGHT VPos TOP I want to s
  • 在模块路径上使用 OpenJFX 11 JMODS 在 JDK 11 上运行 javafx 示例

    我已经从 OpenJFX 项目下载了 JavaFX Jmod 文件并将它们放在目录中G openjfx javafx jmods 11 我使用的是 OpenJDK 11 其中没有 JavaFX jmodJAVA HOME jmods即它不附
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • Mac OS X 下的 JavaFX:系统菜单和模态窗口

    我目前面临 Mac OS X 下的 JavaFX 菜单和模式对话框的问题 我正在使用该方法 MenuBar setUseSystemMenuBar true 为了将系统菜单栏用于我的应用程序菜单 这工作正常 但如果模式对话框打开 菜单不会被
  • Javafx 拖放 TabPane

    我 在 JavaFx 应用程序中 有一个带有不同选项卡的选项卡 我想实现拖放功能以将选项卡拖到舞台之外 这样它就可以生成一个新窗口 就像在 Google Chrome 中一样 谢谢您的帮助 您应该检查 Tom Schindl 在他的网站上显
  • 如何强制 JavaFX 字体抗锯齿?

    在测试 JavaFX 8 应用程序的 GUI 时 我注意到某些标签不显示抗锯齿文本 经过一番谷歌搜索和挣扎后 我发现正在发生一件非常烦人的事情 抗锯齿仅应用于字体大小大于 80 像素的标签 下面是一个比较应用了 AA 的 JavaFX 和
  • JavaFX 脚本和 Java

    简单的问题 我可以在桌面应用程序中混合 Java 和 JavaFX Script 代码吗 如果可能的话 您能给我提供一些示例链接吗 或者我可以将定制的 javafx CustomNode s 打包在 jar 中 并在我的项目中与标准 SWI
  • javaFX helloworld jar 无法在不同平台上运行

    我对 JavaFX 很陌生 不确定是否有人知道我做错了什么 这是场景 在win 7上 使用netbeans 8和jdk1 8 0 05创建了一个helloworld jar 在 win 7 上 java jar helloworld jar
  • 如何设置菜单按钮和菜单项的样式

    我尝试更改菜单按钮中的样式 我可以更改菜单按钮样式 但不能更改其菜单项 无论我尝试什么 菜单按钮内的菜单项都保持不变 menu button fx background color black menu button label fx ba
  • Java 8 Eclipse 未设置根错误

    最近 我为 JavaFX 应用程序安装了 Java 8 build 124 并且开始收到以下错误 javafx fxml LoadException Root hasn t been set Use method setRoot befor
  • javafxports 项目内的 FXML 文件

    我正在查找有关 javafxports 技术的信息 我可以在该项目中使用 FXML 文件吗 这是我的 build gradle buildscript repositories jcenter dependencies classpath

随机推荐

  • 将 html5 canvas 输出保存到我​​的 Rails 应用程序

    我正在尝试将 html5 canvas 的内容保存到我的 Rails 应用程序中 我找到了 var url canvas toDataURL image png 但我不知道如何将其放入我的帖子 表格中 我使用 Carrierwave 来处理
  • 如何在 ReactJS 中悬停? - 快速悬停期间未注册 onMouseLeave

    当你进行内联样式时 如何在 ReactJS 中实现悬停事件或活动事件 我发现 onMouseEnter onMouseLeave 方法有问题 所以希望有另一种方法可以做到这一点 具体来说 如果您将鼠标快速移到某个组件上 则只会注册 onMo
  • 使用选择器和 isEnabled() 禁用列表视图项目

    Scope 使用重写的ArrayAdapter 使用选择器 使用 isEnabled 禁用项目 Aim 禁用某些列表项并通过选择器加载禁用状态视图 Problem 一切正常 自定义视图 未聚焦 聚焦和按下状态的选择器 但禁用的项目不使用禁用
  • 没有花括号的“for”循环有什么作用?

    a 是什么意思for循环周围没有任何花括号吗 据我所知 在 if 语句期间仅执行代码的第一行 那么在 for 循环中它是如何工作的呢 我不太理解不带大括号和带大括号的循环的概念 我想用一段代码进行解释会有所帮助 顺便说一句 这是在 C 语言
  • 锚链接到页面的某个位置

    我有一个链接到另一个页面的锚链接 单击时 默认情况下它会转到下一页的顶部 我希望它被带到页面的某个位置 我该如何做到这一点 使用 jQuery 幻灯片效果或普通 html 例如 当单击 sample a 时 我希望它将您带到链接页面的某个位
  • Compose java.lang.IllegalStateException:尚未应用挂起的组合

    我只想运行简单的测试 class Exa get Rule val composeTestRule createAndroidComposeRule
  • 允许在 JavaScript 中使用西班牙正则表达式的字母数字吗?

    你好 我在 javascript 中尝试了以下代码 if 0 9a z i test string alert oK WITH THE INPUT else alert error 但即使我在字符串中输入了 字符 我也得到了 OK 的结果
  • R 绘制匹配传单地图中选定多边形的图

    我制作了一张传单地图 我想绘制我点击的多边形 我尝试使用 input mymap shape click 和 event id 但它不起作用 请你帮助我好吗 这是一个可重现的示例 这是我的用户界面 library shiny library
  • 如何在 Azure 应用服务上运行 django manage.py 命令

    我想在我的应用程序中的 azure 应用程序服务上执行 Django migrate 命令 python manage py migrate 但我不知道该怎么做 作为常见场景 我们利用虚拟环境来处理 python 脚本作为官方指南显示 如果
  • 使用嵌套循环降低算法的时间复杂度

    I have the following algorithm which I want to rewrite so it has time complexity O n I am new to algorithms but from my
  • JTextArea 实时拼写检查器

    我需要一个好的 Java 拼写检查器库 它可以实时检查 JTextArea 或任何 JTextComponent 的拼写 也就是说 当用户键入时 文本下方应该出现红色波浪下划线 它需要能够通过左键单击 是的 左键单击 单词来列出所有可用的单
  • 使用 Microsoft Graph 删除日历事件 - 为什么我需要多次调用?

    经过大量调查和 Beta 测试 我提出了以下删除日历事件的方法 public async Task
  • 在 JavaScript 中向 Map 添加键/值对的不同方法

    根据MDN地图设置方法 在 javascript 中将键 值对添加到地图的唯一方法是set方法 我想知道当我们添加带有方括号的键 值对时 映射的行为是什么 如下所示 const testMap new Map testMap set 1 f
  • 使用 mongoose 插入或更新到 Mongodb 并在更新时修改内部元素

    假设有一个包含文档的集合 其中field 1是独特的 field 1 abc field 2 0 field 3 我想添加另一个文档 但是随后field 1是一样的 abc 在这种情况下我想增加field 2 并将元素附加到field 3更
  • C#中有连接字符串解析器吗?

    我有一个连接字符串 我希望能够查看例如 数据源 是否有解析器 或者我必须搜索字符串 是的 有System Data Common DbConnectionStringBuilder class DbConnectionStringBuild
  • 在浏览器上存储 css 类

    我的项目可以选择通过单击链接来更改网站主题 ul li class a href Contact a li li class facebook a href Facebook a li li class twitter a href Twi
  • 嵌套路由的命名参数

    resources leagues do resources schedule end 这会生成 leagues id leagues league id schedule id 如何防止联盟 ID 更改参数名称 所以它会是 leagues
  • Matplotlibs Annotate 中的 xytext 详细信息

    通过以下代码 我绘制了烛台图并使用了注释 我一直在玩直到找到文本的正确位置 但我仍然不明白这些数字是什么xytext 15 27 and xytext 17 20 与他们现在的地位有关 这对我来说很奇怪 有人可以向我解释一下吗 提前谢谢了
  • 在 Blender 3D 中生成随机地形

    我尝试在谷歌中找到一个Python脚本 它将在游戏开始时 或每次玩家前进到一个新场景时 生成一个随机地形 但我找到的所有工具都是用于创建地形来渲染它 而不是用于游戏模式 知道如何 在哪里找到一个吗 我假设由于Blender3D具有游戏编程功
  • 使用 JavaFX 创建六边形字段

    我的目标是创建一个六边形瓷砖区域 我已经拥有一个单元矩阵 每个单元的高度都足以容纳完整的六边形图像 import javafx application Application import javafx scene Scene import