2013-10-10 66 views
1

在一个JavaFX程序我有一个标签,某些字体抵消说:被请求JavaFX的:奇怪,在标签上

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

从来就由设计师来改变字体,很容易(我想) :

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

问题是新的字体在屏幕上显示的奇数偏移使文本显得高一点,从而搞乱了设计。

下面是两个标签并排排列的Output Example,左标签有Tahoma字体,看起来不错,而右标签有'HelveticaNeue'字体,比基线高得多。

我已经部分解决了使用文本组件替换Label组件的问题,其中boundsType属性设置为“VISUAL”而不是默认的“LOGICAL”。

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

但它不会是很好的改变了整个系统的标签设置文本组件和其内部按钮和地方同样的问题提出了其他成分标签和将很难替代。

这是这些字体的问题吗?有些字体可以正常工作(Arial,Lucida Sans,MS Sans Serif),而其他字体则显示这种行为(阿尔及利亚,Helvetica)。 我在OS上安装了这些字体,甚至可以在MS Word中使用它们而不显示这些偏移量。

在Label组件上是否存在与Text组件的boundsType属性相同的选项?

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

+0

我从来没有在fxml本身设置字体,我总是使用css文件...你试过了吗?它是否发生在所有操作系统中? – Magcus

+0

嗨马库斯,我也使用了一个css文件,但在示例中使用了内联css,以便它更清晰。我正在研究Windows,并且在同事的MacOS上看到了同样的行为。该应用程序将终于在Linux上运行,但我还没有尝试过。 – shoguren

回答

1

建议的解决方案

你可能需要set a baseline alignment(例如Pos.BASELINE_LEFT)因任何容器被放置内标签。

说明图

下面的图像示出了两种不同的横向方框一个是有色的淡蓝色,其他淡绿色。顶部框具有TOP_LEFT的对齐和BASELINE_LEFT的底部。每个盒子里面有30个点字体中的两个红色边界标签。每个框中的第一个标签位于(Mac)系统字体中,第二个标签位于Helvetica中。正如您所看到的,当对齐位于基线上时,Helvetica字体的底部与System字体的底部对齐。

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> 
+0

我以前尝试过对齐“BASELINE”,但没有想到在标签的容器上使用它。结果比我的要好得多(至少文本与组件中的其他标签正确对齐),但偏移量仍然存在,但已移至底部。这使得容器HBox的高度从42px变为49px。这里是你的例子的[output](http://es.tinypic.com/r/dcxx82/5)和Designer给我的字体。这并不坏,但是当我用[按钮](http://es.tinypic.com/r/96m9vt/5)尝试时,结果不好。有什么需要做的吗? – shoguren

+0

同意,按钮行为不好。我不知道你能做些什么。 – jewelsea