1

私は1つの問題に取り組みました。

CSS で任意のノードのフォント サイズを設定すると、どの測定単位を選択しても (pt と px の両方を試しました)、フォント サイズはピクセル単位で設定されます。また、「Font」型のパラメーターを受け取るメソッド「setFont」を使用して、「Text」のフォントを設定しようとしました。

JavaFX2 のドキュメントには、次のように書かれています。

Font のサイズは、実際の測定値である約 1/72 インチのポイントで指定されると説明されています。

ただし、フォントサイズはまだピクセル単位で設定されていました。

実験のために、シーンに「WebView」を追加してページをロードし、その上に 2 つの div タグを表示しました。最初の div 内のフォント サイズは pt で、2 番目の div 内は px です。私が提案したように、フォント サイズは異なり、最後の div のフォント サイズは、最初に参照したノードのフォント サイズと同じでした。

なぜこうなった?ptでフォントサイズを設定するにはどうすればよいですか? 現時点では、この問題を解決するために、次の式を使用して pt を px に変換します: px=pt/0.75 (私の画面の dpi は 96)。

ここに画像の説明を入力

例:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontSmoothingType;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

import java.net.URL;

public class TestFont extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        final Group root = new Group();
        Scene s = new Scene(root, 500, 500);


        Text t = new Text(100, 250, "1) - abcdeABCDE12");
        t.setFontSmoothingType(FontSmoothingType.LCD);
        t.setStyle("-fx-font-size: 36pt; -fx-font-family: Calibri;");
        Text t2 = new Text(100, 300, "2) - abcdeABCDE12");
        t2.setFont(javafx.scene.text.Font.font("Calibri", FontWeight.NORMAL, FontPosture.REGULAR, 36));
        t2.setFontSmoothingType(FontSmoothingType.GRAY);
        Text t3 = new Text(100, 350, "3) - abcdeABCDE12");
        t3.setStyle("-fx-font-size: 36px; -fx-font-family: Calibri;");;
        t3.setFontSmoothingType(FontSmoothingType.GRAY);

        WebView wv = new WebView();
        wv.setLayoutX(100);
        wv.setLayoutY(360);
        URL urlWebViewCell = this.getClass().getResource("/testFont.html");
        wv.getEngine().load(urlWebViewCell.toExternalForm());

        root.getChildren().addAll(wv, t, t2, t3);

        stage.setScene(s);
        stage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}

testFont.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>

</head>
<body>
<div style="font-size: 36pt; font-family: Calibri;">4) - abcdeABCDE12</div>
<div style="font-size: 36px; font-family: Calibri;">5) - abcdeABCDE12</div>
</body>
</html>
4

1 に答える 1

0

スタイルを適用することで、Font.font(String, double) メソッドは「のみ」フォントを検索し (フォント コンストラクターは同じサイズのパラメーターを使用します)、常に double 値をピクセル単位のサイズ値として使用していると思います。そのため、必要な測定を選択する方法はありません。

だからあなたの現在の理由が最高です。ただし、次を使用できます。

  Toolkit.getDefaultToolkit().getScreenResolution();

解像度から独立します。

于 2012-10-09T17:08:24.040 に答える