我遇到了一个问题。
当我使用CSS设置任何节点的字体大小时,无论我选择哪个测量单位(我尝试了pt和px),字体大小仍以像素为单位。 我还尝试使用“setFont”方法设置“Text”的字体,该方法接受“Font”类型的参数。
在JavaFX2文档中说:
字体的大小被描述为以点为单位指定 是一个大约1/72英寸的真实世界测量值。
但字体大小仍以像素为单位。
对于实验,我将“WebView”添加到场景中并在其中加载了一个页面,我在其上显示了两个div标签。在第一个div中,字体大小以pt为单位,在第二个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>
答案 0 :(得分:0)
我认为通过应用样式方法Font.font(String,double)“only”搜索字体(顺便说一句,字体构造函数使用相同的大小参数)并始终使用double值作为大小值(以像素为单位) 。因此,无法选择您想要的测量值。
所以你目前为什么是最好的。 但你可以使用:
Toolkit.getDefaultToolkit().getScreenResolution();
独立于决议。