我有一个包含以下代码的 Swing 程序:
font = new Font(Font.SANS_SERIF,Font.PLAIN,8);
呈现如下:
我选择这个是因为我想要简单的字体,而且我想要它“便携”。
在 JavaFX 中,我有:
font = Font.font("SansSerif",8);
我曾希望得到类似的结果,但我得到了:
它看起来是粗体的。
我已经尝试了所有 JavaFX 选项,例如 font = Font.font("SansSerif",FontWeight.NORMAL,8)
。
我尝试过不同的重量:轻、薄等
我直接尝试过 Helvetica。我试过阿里尔。他们看起来都一样。
我编写了一个简单的采样器,您可以在其中选择字体名称并查看您得到的内容。很多字体有不同的名称,但根本没有改变。
我浏览了 Helvetica:Helvetica、Helvetica Bold、Helvetica Bold Oblique、Helvetica Light、Helvetica Light Oblique。它们看起来都一样,没有一个是粗体,没有一个是斜体或浅色或任何东西。这些名字似乎没有任何区别。
有些作品,Monospace 作品,Times 作品——因为它们不是 SansSerif/Helvetica。
现在,对于 JavaFX,我只是在做:
Text t = new Text(x,y,text);
t.setfont(font);
getchildren.add(t);
我不会有意地将 CSS 用于任何用途。我没有 CSS 文件。
所以,我不知道为什么我的字体选择不起作用。
这是我的字体选择器实验的代码。
很明显,我认为我在 JavaFX 中缺少一些基本的字体和文本内容。
public class App extends Application {
@Override
public void start(Stage stage) {
FontControlPane pane = new FontControlPane();
var scene = new Scene(pane,640,480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
public class FontControlPane extends Pane {
FontSizePane fsPane;
ComboBox<String> comboBox;
public FontControlPane() {
fsPane = new FontSizePane();
ObservableList<String> families = FXCollections.observableList(Font.getFontNames());
comboBox = new ComboBox<>(families);
comboBox.setOnaction(e -> fsPane.setfontName(comboBox.getvalue()));
populateMap();
}
private void populateMap() {
ObservableList<Node> list = getchildren();
list.clear();
BorderPane pane = new BorderPane();
pane.setTop(comboBox);
pane.setCenter(fsPane);
list.add(pane);
}
}
public class FontSizePane extends Pane {
String fontName;
public FontSizePane() {
this.fontName = fontName;
populate();
}
public String getFontName() {
return fontName;
}
public void setfontName(String fontName) {
this.fontName = fontName;
populate();
}
private void populate() {
ObservableList<Node> list = getchildren();
list.clear();
setBackground(new Background(new BackgroundFill(Color.WHITE,CornerRadii.EMPTY,Insets.EMPTY)));
if (fontName == null) {
Text t = new Text(0,20,"No font selected");
list.add(t);
return;
}
Set<Line> lines = new HashSet<>();
Text t = new Text(0,fontName);
list.add(t);
double y = 30;
double x = 0;
String text = "AaBbccddEeFfGgHhIiJjKkLlMmNnOoPpqqRrSsTtUuVvWwXxYyZz 0123456789";
for (int size = 4; size < 72; size += 4) {
Font f = Font.font(fontName,size);
t = new Text(x,text);
t.setfont(f);
list.add(t);
y += (t.getLayoutBounds().getHeight() + 2);
}
}
}