1

javafx プログラムでは、次のようなラベルがあります。

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

デザイナーからフォント ファミリを変更するように依頼されましたが、非常に簡単です (と思いました)。

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

問題は、新しいフォントが奇妙なオフセットで画面に表示され、テキストが少し高く表示され、デザインが台無しになることです.

これは、2 つのラベルを並べた出力例です。左側のラベルは Tahoma フォントで問題ないように見えますが、右側のラベルは 'HelveticaNeue' フォントで、ベースラインよりもはるかに高くなっています。

Text コンポーネントを使用して、Label コンポーネントをデフォルトの「LOGICAL」ではなく「VISUAL」に設定された boundsType 属性に置き換えることで、問題を部分的に解決しました。

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

しかし、システム全体のラベルをテキスト コンポーネントに変更するのは良くありません。また、ボタンやその他のコンポーネント内にラベルがあり、同じ問題が発生し、代替するのが難しい場合があります。

これはこれらのフォントに問題がありますか? 正常に動作するフォント (Arial、Lucida Sans、MS Sans Serif) もあれば、この動作を示すフォント (Algerian、Helvetica) もあります。これらのフォントは OS にインストールされており、これらのオフセットを表示せずに MS Word で使用することもできます。

Text コンポーネントの boundsType 属性と同じことをする Label コンポーネントのオプションはありますか?

誰かが何が起こっているのか知っていることを願っています。

4

1 に答える 1

2

推奨される解決策

ラベルを配置するコンテナに合わせて、ベースラインの配置(例: Pos.BASELINE_LEFT ) を設定する必要があるでしょう。

説明図

以下の画像は、2 つの異なる HBox を示しています。1 つは薄い青、もう 1 つは薄い緑です。上部のボックスは TOP_LEFT の配置で、下部は BASELINE_LEFT の配置になっています。各ボックスの内側には、30 ポイントのフォントの 2 つの赤い縁取りラベルがあります。各ボックスの最初のラベルは (Mac) システム フォントで、2 番目のラベルは Helvetica です。ご覧のとおり、配置がベースライン上にある場合、Helvetica フォントのベースはシステム フォントのベースと一致します。

フォントデモ

サンプル FXML

上記の画像を作成するためにSceneBuilderにロードできる FXML ファイルを次に示します。

<?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>
于 2013-10-11T05:39:35.000 に答える