【问题标题】:Transform a text case in to UpperCase Using JavaFX CSS使用 JavaFX CSS 将文本大小写转换为大写
【发布时间】:2015-07-17 07:14:06
【问题描述】:

任何人都可以帮助我更改 JavaFX 项目中的案例我试图通过浏览找到解决方案,但我找不到请找到我正在尝试的以下代码,但它无法得到结果

.text {
    -fx-font-family: "Arial";
    -fx-font-size: 24;
    -fx-text-fill: #263248;
    -fx-padding: 10 20 10 20;
    -fx-cursor: hand;
    -fx-text-transform: uppercase; /* this property is not working */ 
}

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • -fx-text-transform 是 JavaFX css 属性吗?我不这么认为。
  • 我已经发表了评论,我需要单独解决该行的问题......具体的代码是什么?
  • 您无法使用 CSS 实现您想要的目标。您需要在 Java 代码中执行此操作。
  • 您始终可以将控制器分配给 FXML,并在 initialize(..) 内进行必要的代码排列。欲了解更多信息,请通过Mastering FXML
  • 然后给你的控件添加一个监听器并使用toUpperCase()的方法。一个简单的例子是in this answer

标签: java css javafx


【解决方案1】:

不幸的是,JavaFX 中没有处理文本转换的 CSS 属性(目前没有,请参阅JavaFX CSS Reference)。但是你实际上可以在 Java 中只用一行代码就可以做到!

例如,您有一个 Label 节点,其 ID 名为 label

<Label fx:id="label" text="Hello!" />

在这种情况下,您可以通过其 ID 引用 node,并使用控制器类设置其文本 toUpperCase()

// Reference to the node you wish
// to transform texts to uppercase.
@FXML private Label label;

@Override
// Assuming you have Initializable class implemented.
public void initialize(URL arg0, ResourceBundle arg1) {

  // Get the current text value of the node.
  String text = label.getText();

  // Then update the text into whatever case you like.
  label.setText(text.toUpperCase());

}

直接来自 Java 代码(一行代码)。

Label label = new Label("Hello!".toUpperCase());

【讨论】:

  • 感谢您抽时间检查!
【解决方案2】:

这是一种通用方式。
您可以在styleClass 中将您需要的标记为upperlower 并调用此方法:

public static void textTransform(@NotNull Node root) {
    _textTransform(root, ".upper");
    _textTransform(root, ".lower");
}
private static void _textTransform(@NotNull Node root, @NotNull String selector) {
    boolean upper = selector.equalsIgnoreCase(".upper");
    for (Node node : root.lookupAll(selector)) {
        if (node instanceof Text) {
            Text text = (Text) node;
            text.setText(upper ? text.getText().toUpperCase() : text.getText().toLowerCase());
        } else
        if (node instanceof Label) {
            Label label = (Label) node;
            label.setText(upper ? label.getText().toUpperCase() : label.getText().toLowerCase());
        } else
        if (node instanceof Button) {
            Button button = (Button) node;
            button.setText(upper ? button.getText().toUpperCase() : button.getText().toLowerCase());
        }
    }
}

【讨论】:

    【解决方案3】:

    您可以将 ChangeListener 添加到 Text:

    Text text;
    //...
    text.textProperty().add(
        (observer, oldValue, newValue) -> text.setText(newValue.toUpperCase())
    );
    

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2011-07-21
      • 2015-09-02
      • 2014-11-07
      • 1970-01-01
      • 2011-10-29
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多