2013-10-10 64 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