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

JavaFX:如何使用GraphicsContext。填充文本?

韦泳
2023-03-14

因此,我试图在我的JavaFX应用程序中创建一个自定义节点,它从画布扩展而来,因此可以自己进行渲染。我一开始只是试着画一个文本“Hello world”在画布上,但可惜它没有出现,即使我可以通过鼠标事件处理程序确认应用程序中是否存在自定义节点。

java prettyprint-override">public class EditorFragment extends Canvas {
    public EditorFragment() {
        super(100, 30);
        this.render(this.getGraphicsContext2D());
        this.addEventFilter(MouseEvent.MOUSE_CLICKED, mouseEvent -> {
            System.out.println("Mouse event occurred in fragment.");
            System.out.println(mouseEvent.toString());
        });
        this.setOnMouseMoved(mouseEvent -> {
            System.out.println("Mouse moved over fragment.");
        });
    }

    protected void render(GraphicsContext gc) {
        gc.setFill(Color.BLACK);
        gc.fillText("Hello world.", 0, 0);
    }
}

简而言之,如果我将这个EditorFragment的一个新实例添加到一个窗格中,我知道它被添加了,如果我调用gc。fillRect(…) ,我会看到一个矩形显示节点的位置和大小,但没有显示文本。为什么?


共有1个答案

晏富
2023-03-14

显然,经过更多的搜索,我发现文本实际上是被绘制的,但是0,0通常对应于文本的左下角,所以它被绘制在我的画布上方。为了解决这个问题,我将渲染方法更改为以下内容:

    protected void render(GraphicsContext gc) {
        gc.setFill(Color.BLACK);
        gc.setTextAlign(TextAlignment.LEFT);
        gc.setTextBaseline(VPos.CENTER);
        gc.fillText("Hello world.", 0, this.getHeight() / 2);
    }
 类似资料:
  • 我的Java程序产生了很多数据,我用它构建了单个的ResultObject。因为只有某些结果对象会引起兴趣,所以我填充了一个可观察的HashMap 虽然映射和处理这些结果按预期工作,但我很难用该ObservableHashMap填充TableView 我的CustomObject(如果两个CustomObject具有相同的属性,只需检查JSONObject): 我的ObservableHashMa

  • 我无法用地图填充TableView 我有一个类,它拥有一个以产品名称为键、以正常价格为值的地图。我创建了一个tableView,其中一列是名称,一个主列是价格,分为两列normal和new,如下所示。 我已经做了这个方法使地图成为一个可观察列表。 这就是我卡住的地方。我不知道如何用这个可观察列表填充每个单元格。我确实知道我必须以某种方式使用“setCellFactory”。有人有什么建议吗?如何制

  • 我在互联网上找不到正确的答案,如何用ObservableMap作为MapProperty填充tableviw。我想在按值排序的tableview中显示文章。

  • 我正在做一个利用SVG的项目。目前,该程序将SVG存储为一个FXML文件中的SVGPath对象。然后将文件加载到一个组中,然后将其添加到屏幕中。在FXML文件中,大约有300个这样的SVGPath。我相信最终意味着场景图上有300个节点。 我最终将不得不增加SVGPath的数量,并且担心在场景中放置更多的节点,因此我开始考虑使用cavas/GraphicsContext。 有人成功地使用了appe

  • 我有一个简单的JavaFX类,对于这个问题,它的结构是这样的。 BorderPane包含包含FlowPane的StackPane。 几天来,我一直试图让StackPane填充其父级BorderPane,但似乎没有任何效果。最终结果应该是StackPane的背景设置为“红色”。 代码: 我的应用程序正在运行的照片 所以基本上这个左侧区域应该完全填充我的BorderPane的左侧,因此背景应该正确覆盖

  • 如何在FXML中定义表,然后使用JavaFX代码在运行时动态填充表?