如何解决如何在javaFX的文本字段中制作动态字体
我创建了一个JavaFX代码,该代码生成3x3矩阵,其随机数为1到9。 我希望代码在每次更改窗口大小时都能更改文本大小,我希望ti随窗口像素动态变化。我听说过使用监听器,但是我不知道如何使用它们。
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
int size = 500;
GridPane root = new GridPane();
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
int num = (int) (Math.random() * 9) + 1;
TextField tf = new TextField();
tf.setFont(Font.font("Ariel",FontWeight.BOLD,50));
tf.setPrefheight(size);
tf.setPrefWidth(size);
tf.setAlignment(Pos.CENTER);
tf.setEditable(false);
tf.setText(""+num);
root.setRowIndex(tf,y);
root.setColumnIndex(tf,x);
root.getChildren().add(tf);
}
}
Scene scene = new Scene(root,size,size);
primaryStage.setTitle("Random Binary Matrix (JavaFX)");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
解决方法
您可以在Gridpane上的widthProperty()
和heightProperty()
中添加一个侦听器。对于您的情况,您可以尝试执行以下操作:
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
int size = 500;
GridPane root = new GridPane();
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
int num = (int) (Math.random() * 9) + 1;
TextField tf = new TextField();
tf.setFont(Font.font("Ariel",FontWeight.BOLD,50));
tf.setPrefHeight(size);
tf.setPrefWidth(size);
tf.setAlignment(Pos.CENTER);
tf.setEditable(false);
tf.setText(""+num);
root.setRowIndex(tf,y);
root.setColumnIndex(tf,x);
root.getChildren().add(tf);
ChangeListener listener=(observable,oldValue,newValue) -> {
changeFontSize(root,tf);
};
root.heightProperty().addListener(listener);
root.widthProperty().addListener(listener);
}
}
Scene scene = new Scene(root,size,size);
primaryStage.setTitle("Random Binary Matrix (JavaFX)");
primaryStage.setScene(scene);
primaryStage.show();
}
private void changeFontSize(GridPane root,TextField tf) {
double min = Math.min(root.getWidth(),root.getHeight());
tf.setFont(Font.font("Ariel",min/10));
}
public static void main(String[] args) {
launch(args);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。