【发布时间】:2021-06-28 18:26:56
【问题描述】:
基本上我想要实现的是希望字体大小自动调整。我有一个 1920*1080 的窗口,标签是全宽和全高。我启用了文本换行,因为我打算在该软件中运行歌词。所以想法是使文本尽可能大的字体适合容器。或者,如果文本太多,不要消失在屏幕底部,而是简单地缩小字体。我使用场景构建器制作了大部分框架,它运行 FXML。提前谢谢你的帮助。也许我所拥有的图像会有所帮助。[这是图像][1]
Presentation.fxml
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="1080.0" prefWidth="1920.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.presentationController">
<children>
<Canvas fx:id="screen" height="1080.0" nodeOrientation="INHERIT" width="1920.0">
<cursor>
<Cursor fx:constant="NONE" />
</cursor>
</Canvas>
<Label fx:id="displayText" alignment="CENTER" layoutX="-2.0" layoutY="-4.0" prefHeight="1085.0" prefWidth="1924.0" text="Стучатся молитвы в небо, Касаясь святых небес! Звучат в них печаль и горе, И боль, как глубокий порез! Молитвы такие о детях, Родители в небо кричат! Они днем и ночью взывают! Не могут сердца их молчать!" textAlignment="CENTER" textFill="WHITE" textOverrun="WORD_ELLIPSIS" wrapText="true">
<font>
<Font size="79.0" />
</font>
<padding>
<Insets bottom="40.0" left="40.0" right="40.0" top="40.0" />
</padding>
<cursor>
<Cursor fx:constant="NONE" />
</cursor>
</Label>
</children>
<cursor>
<Cursor fx:constant="NONE" />
</cursor>
演示控制器.java
package main;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Label;
import java.net.URL;
import java.util.ResourceBundle;
public class presentationController implements Initializable {
@FXML public Canvas screen;
@FXML public Label displayText;
public drawScreen toscreen;
public presentationController() {
toscreen = new drawScreen();
}
public void initialize(URL url, ResourceBundle resourceBundle) {
toscreen.initd(screen,displayText);
toscreen.draw();
toscreen.displayText("Стучатся молитвы в небо, Касаясь святых небес!\n" +
"Звучат в них печаль и горе,\n" +
"И боль, как глубокий порез!\n" +
"Молитвы такие о детях,\n" +
"Родители в небо кричат!\n" +
"Они днем и ночью взывают!\n" +
"Звучат в них печаль и горе,\n" +
"И боль, как глубокий порез!\n" +
"Молитвы такие о детях,\n" +
"Родители в небо кричат!\n" +
"Они днем и ночью взывают!\n" +
"Звучат в них печаль и горе,\n" +
"И боль, как глубокий порез!\n" +
"Молитвы такие о детях,\n" +
"Родители в небо кричат!\n" +
"Они днем и ночью взывают!\n" +
"Не могут сердца их молчать");
}
}
画屏
package main;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import java.io.IOException;
public class drawScreen {
Canvas previewScreen;
Canvas displayScreen;
public GraphicsContext g1;
public GraphicsContext g2;
public Label songLyricsPre;
public Label songLyricsDis;
public drawScreen(){
}
public void initp(Canvas previewScreen, Label text){
this.previewScreen = previewScreen;
this.songLyricsPre = text;
System.out.println("Display Initialized: Preview");
}
public void initd( Canvas displayScreen, Label text){
this.displayScreen = displayScreen;
this.songLyricsDis = text;
System.out.println("Display Initialized: Main");
}
public void draw(){
Image i = new Image("/img/basic.png");
try {
if (previewScreen != null) {
g1 = previewScreen.getGraphicsContext2D();
g1.drawImage(i, 0, 0, previewScreen.getWidth(), previewScreen.getHeight());
}
if (displayScreen != null) {
g2 = displayScreen.getGraphicsContext2D();
g2.drawImage(i, 0, 0, displayScreen.getWidth(), displayScreen.getHeight());
}
} catch (Exception e){
System.out.println("Failed to read Canvas");
}
}
public void displayText(String text){
try {
if (previewScreen != null) {
songLyricsPre.setText(text);
}
if (displayScreen != null) {
songLyricsDis.setText(text);
}
} catch (Exception e){
System.out.println("Failed to read Canvas");
}
}
}
我希望这足以帮助您了解发生了什么 [1]:https://i.stack.imgur.com/QKrLb.png
【问题讨论】:
-
请使用java命名约定
-
等等什么意思?
-
你问的不是认真的,是吗 :) 只需在你最喜欢的在线搜索字段中输入单词即可找到..
-
老兄,对不起,我不擅长 java 中的命名约定。我对此有点菜鸟,否则我不会在这里问任何问题。我觉得我遵循的很好,也许不是,我还有改进的地方。
-
我也只是查了一下,我的代码不符合这些命名约定。
标签: java javafx scenebuilder