我正在尝试使我的Text对象看起来像使用Label来显示一些文本的其他块。我不能使用Label因为我需要Text的功能来设置包装宽度。但我看到最终显示的文字之间的直接差异。从截图中可以看出Text的字体看起来比Label更大胆。如何设置文本样式以使其看起来像Label?
我认为这只是我的样式表问题,但我可以在SceneBuilder中看到相同的区别。
答案 0 :(得分:1)
在default style sheet中,标签中的文字颜色设置为名为-fx-text-background-color
的查找颜色(此是文本的前景色,尽管name),这又取决于查找颜色-fx-background
(因此名称......)。 -fx-background
的值通常从父级继承;这里的想法是它使用与背景形成鲜明对比的颜色。该值定义为
-fx-text-background-color: ladder(
-fx-background,
-fx-light-text-color 45%,
-fx-dark-text-color 46%,
-fx-dark-text-color 59%,
-fx-mid-text-color 60%
);
因此,您可以使用与文本-fx-fill
属性相同的CSS查找颜色,使文本看起来像标签。这是一个非常快速和肮脏的演示:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class TextColor extends Application {
@Override
public void start(Stage primaryStage) {
Label plainLabel = new Label("A plain label");
Text styledText = new Text("Styled text");
styledText.setStyle("-fx-fill: -fx-text-background-color;");
Text plainText = new Text("A plain text");
VBox root = new VBox(10, plainLabel, styledText, plainText);
root.setPadding(new Insets(10));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
给出了
这也使Text
适当地对后台的变化作出反应。如果你添加
root.setStyle("-fx-background: black;");
然后样式文本(默认情况下标签)响应:
另请注意,对于Text
的用例,
label.setPrefWidth(...);
label.setWrapText(true);
将使您能够控制标签的包装宽度,并且可能比您在此处建议的方法更自然地解决您尝试做的事情。