css - Javafx Text 和 Label 字体看起来不同
问题描述
我试图让我的 Text 对象看起来像其他使用 Label 显示一些文本的块。我不能使用标签,因为我需要文本的功能来设置换行宽度。但我看到了最终显示文本之间的直接区别。正如您从屏幕截图中看到的那样,Text 的字体看起来比 Label 的字体粗一点。我怎样才能设置我的文本看起来就像标签一样?
我认为这只是我的样式表问题,但我可以在 SceneBuilder 中看到相同的差异。
解决方案
在默认样式表中,标签中的文本颜色设置为名为的查找颜色-fx-text-background-color
(这是文本的前景色,尽管有名称),这又取决于查找的颜色-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%
);
因此,您可以通过对文本属性使用相同的 CSS 查找颜色来使文本看起来像一个标签-fx-fill
。这是一个非常快速和肮脏的演示:
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;");
然后样式文本(和标签,默认情况下)响应:
另请注意,对于您的用例 for Text
,组合
label.setPrefWidth(...);
label.setWrapText(true);
将使您能够控制标签的换行宽度,并且可能是比您在此处建议的方法更自然的解决方案。
推荐阅读
- elasticsearch - 需要使用 curl 或使用 url 获取时间范围内的索引数据
- angular - Material Datepicker:如何在月视图中获取每一天的自定义格式?
- python - 如何根据规则从较小的矩阵创建更大的矩阵
- python - 遍历 pandas 中的列表
- javascript - 如何在对象数组中查找特定键是否为真
- wpf - 如何将颜色设置为要在整个应用程序中使用的静态资源?
- r - eval(parse()) 中的错误 - r 无法找到参数输入
- mysql - SQL查询以找到正确的引擎运行对
- python - 在 Python 中从函数中提取变量
- angular - 在对象列表中查找成员 [错误 TS1005: ':' 预期]