2013-10-10 1 views
1

О программе JavaFX У меня есть ярлык, сказать:JavaFX: Странное смещение для некоторых шрифтов на наклейках

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

I've был предложен дизайнером, чтобы изменить семейство шрифтов, довольно легко (я думал) :

<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). У меня есть эти шрифты, установленные в ОС, и их можно даже использовать в MS Word, не показывая эти смещения.

Есть ли опция в компоненте Label, которая выполняет то же самое, что и атрибут boundsType компонента Text?

Надеюсь, что кто-то знает, что происходит, спасибо в продвинутом виде.

+0

Я никогда не устанавливал шрифты в самом файле fxml, я всегда использую файл css ... Вы пытались с этим? Это происходит во всех ОС? – Magcus

+0

Привет, Magcus, я также использую файл css, но использую inline css в примере, чтобы он был яснее.Я работаю над окнами и видел такое же поведение в MacOS колледжа. Приложение, наконец, будет работать на Linux, но я еще не пробовал. – shoguren

ответ

1

Предлагаемое решение

Вы, вероятно, нужно set a baseline alignment (например Pos.BASELINE_LEFT) для любой контейнер ваши метки помещаются внутри.

пояснительная схема

На рисунке ниже показаны два различных HBoxes один цветной бледно-голубой, другой бледно-зеленого цвета. Верхняя коробка имеет выравнивание 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> 
+0

Раньше я пытался с выравниванием «BASELINE», но не думал использовать его в контейнере ярлыка. Результат намного лучше, чем у меня (по крайней мере, текст правильно выровнен по отношению к другим меткам в компоненте), однако смещение все еще существует, но перемещается в нижнюю часть. Это позволяет контейнеру HBox идти от 42px до 49px в высоту. Вот ваш [output] (http://es.tinypic.com/r/dcxx82/5) вашего примера с шрифтом, который дал мне Дизайнер. Это не так уж плохо, но когда я пробую это с помощью кнопок [http://es.tinypic.com/r/96m9vt/5], результат не очень хорош. Есть что-то делать с этим? – shoguren

+0

Согласовано, поведение кнопки не очень хорошее. Я не знаю, что вы можете с этим поделать. – jewelsea

Смежные вопросы