css - JavaFX:标签上某些字体的奇怪偏移

标签 css fonts javafx

在 javafx 程序上我有一个标签,比如:

<Label style="-fx-font: 25px 'Tahoma';" text="Hello World!!" />

设计师要求我更改字体系列,这很容易(我认为):

<Label style="-fx-font: 25px 'Algerian';" text="Hello World!!" />

问题是屏幕上显示的新字体有一个奇怪的偏移量,这使得文本看起来有点高,从而打乱了设计。

这是一个 Output Example两个标签并排显示,左边的标签有 Tahoma 字体,看起来不错,而右边的标签有 'HelveticaNeue' 字体,比基线高很多。

我部分解决了这个问题,使用 Text 组件替换 Label 组件,并将 boundsType 属性设置为“VISUAL”而不是默认的“LOGICAL”。

<Text boundsType="VISUAL" style="-fx-font-family: 'Algerian'; -fx-font-size: 25px;" text="Hellow World!!" />

但是将整个系统的 Label 更改为 Text 组件并不好,按钮和其他组件中的标签会出现相同的问题并且难以替代。

这是这些字体的问题吗?一些字体工作正常(Arial、Lucida Sans、MS Sans Serif),而其他字体(Algerian、Helvetica)则表现出这种行为。 我在操作系统上安装了这些字体,甚至可以在 MS Word 中使用它们而不显示这些偏移量。

Label 组件上是否有与 Text 组件的 boundsType 属性功能相同的选项?

希望有人知道发生了什么,先谢谢了。

最佳答案

建议的解决方案

您可能需要 set a baseline alignment (例如 Pos.BASELINE_LEFT )对于您的标签放置在其中的任何容器。

解释图

下图显示了两个不同的 HBox,一个是浅蓝色,另一个是浅绿色。顶部框的对齐方式为 TOP_LEFT,底部的对齐方式为 BASELINE_LEFT。每个盒子内都有两个 30 磅字体的红色边框标签。每个框中的第一个标签是 (Mac) 系统字体,第二个标签是 Helvetica。如您所见,当对齐位于基线上时,Helvetica 字体的底部与系统字体的底部对齐。

fontdemo

示例 FXML

这是一个 FXML 文件,您可以在 SceneBuilder 中加载它, 生成上图。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>

<StackPane id="StackPane" style="-fx-background-color: cornsilk;" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
  <children>
    <VBox alignment="TOP_LEFT" spacing="10.0">
      <children>
        <Label text="HBox Alignment - TOP_LEFT" />
        <HBox alignment="TOP_LEFT" spacing="5.0" style="-fx-background-color: lightblue;">
          <children>
            <Label style="-fx-border-color: red;" text="System">
              <font>
                <Font size="30.0" fx:id="x1" />
              </font>
            </Label>
            <Label style="-fx-border-color:red;" text="Helvetica">
              <font>
                <Font name="Helvetica" size="30.0" fx:id="x2" />
              </font>
            </Label>
          </children>
        </HBox>
        <Separator prefWidth="200.0" />
        <Label text="HBox Alignment - BASELINE_LEFT" />
        <HBox alignment="BASELINE_LEFT" spacing="5.0" style="-fx-background-color: palegreen;">
          <children>
            <Label font="$x1" style="-fx-border-color:red;" text="System" />
            <Label font="$x2" style="-fx-border-color:red;" text="Helvetica" />
          </children>
        </HBox>
      </children>
    </VBox>
  </children>
  <padding>
    <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
  </padding>
</StackPane>

关于css - JavaFX:标签上某些字体的奇怪偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303579/

相关文章:

java - FXMLLoader.getController() 无论如何都返回 null

html - HTML 中特殊的不存在元素空间

css - 类选择器在 css 中不起作用,但 id 可用于添加一些样式

html - 使用 CSS/HTML 在页面上创建空白的正确方法是什么?

Android - 字体(只有字母)背景颜色

Android,文本/字体呈现为正方形

css - Getuikit 中使用较少预处理器的自定义字体

css - JavaFX - 相同节点类型的不同 css 类

javascript - jquery - 仅对单击的元素进行动画处理并隐藏另一个元素

javafx-2 - 在JavaFX中设置TextField宽度