因此,我尝试在我的JavaFX应用程序中创建一个自定义节点,它从Canvas扩展而来,因此它自己完成所有的呈现。我从简单地尝试绘制文本"Hello world“开始。虽然我可以通过鼠标事件处理程序确认应用程序中自定义节点的存在,但遗憾的是它没有出现。
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的一个新实例添加到一个Pane中,我知道它已经被添加了,如果我调用gc.fillRect(...),我会看到一个矩形,显示节点的位置和大小,但不显示文本。为什么?
发布于 2020-10-16 15:37:41
显然,经过进一步的搜索,我发现文本实际上是在绘制的,但0, 0通常对应于文本的左下角,所以它是在画布上绘制的。为了解决这个问题,我将render方法更改为以下内容:
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);
}https://stackoverflow.com/questions/64384714
复制相似问题