Java FXML - 显示文本输入字段的字符串长度
Java FXML - Display String length of text input field
伙计们,我想在输入文本字段下方显示输入文本字段的字符串长度。参考下面的截图。
基本上,我希望以动态方式显示计数,即每当用户更改输入时,计数也应相应更改。
如何使用 javafx 实现这一点?
另外,如何将字符串长度值注入到FXML文件中?
您需要使用绑定来执行此操作。在您的 TextField 下方添加一个标签。
像这样创建一个 StringBinding:
StringBinding binding = Bindings.createStringBinding(() -> {
String characterCount = "0";
if(textField.getText() != null){
characterCount = textField.getText().length() + "";
}
return "StringLength: " + characterCount;
}, textField.textProperty());
countLabel.textProperty().bind(binding);
如果您想避免在每个键入的字段上进行 concat,请使用两个标签,一个用于 StringLength:,另一个用于字符计数,那么只会更新该标签。
如果您的标签名为 lbl 和 textField txt:
@FXML
void calculateLenght(KeyEvent event) {
String text = txt.getText();
int len = 0;
if (text != null) {
len = text.length();
lbl.setText("lenght: " + len);
}
}
在您的 fxml 文件中:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/9"
fx:controller="application.SampleController">
<center>
<VBox prefHeight="200.0" prefWidth="172.0"
BorderPane.alignment="CENTER">
<children>
<Label text="String" />
<TextField fx:id="txt" onKeyTyped="#calculateLenght" />
<Label fx:id="lbl" text="lenght:" />
</children>
</VBox>
</center>
</BorderPane>
请注意 TextField 中的 onKeyTyped="#calculateLenght"
Bindings.length
returns 一个 IntegerBinding
包含一个 StringProperty
中字符串值的长度。 asString
允许您将值格式化为字符串:
label.textProperty().bind(Bindings.length(textField.textProperty())
.asString("String length: %d"));
伙计们,我想在输入文本字段下方显示输入文本字段的字符串长度。参考下面的截图。
基本上,我希望以动态方式显示计数,即每当用户更改输入时,计数也应相应更改。
如何使用 javafx 实现这一点?
另外,如何将字符串长度值注入到FXML文件中?
您需要使用绑定来执行此操作。在您的 TextField 下方添加一个标签。
像这样创建一个 StringBinding:
StringBinding binding = Bindings.createStringBinding(() -> {
String characterCount = "0";
if(textField.getText() != null){
characterCount = textField.getText().length() + "";
}
return "StringLength: " + characterCount;
}, textField.textProperty());
countLabel.textProperty().bind(binding);
如果您想避免在每个键入的字段上进行 concat,请使用两个标签,一个用于 StringLength:,另一个用于字符计数,那么只会更新该标签。
如果您的标签名为 lbl 和 textField txt:
@FXML
void calculateLenght(KeyEvent event) {
String text = txt.getText();
int len = 0;
if (text != null) {
len = text.length();
lbl.setText("lenght: " + len);
}
}
在您的 fxml 文件中:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/9"
fx:controller="application.SampleController">
<center>
<VBox prefHeight="200.0" prefWidth="172.0"
BorderPane.alignment="CENTER">
<children>
<Label text="String" />
<TextField fx:id="txt" onKeyTyped="#calculateLenght" />
<Label fx:id="lbl" text="lenght:" />
</children>
</VBox>
</center>
</BorderPane>
请注意 TextField 中的 onKeyTyped="#calculateLenght"
Bindings.length
returns 一个 IntegerBinding
包含一个 StringProperty
中字符串值的长度。 asString
允许您将值格式化为字符串:
label.textProperty().bind(Bindings.length(textField.textProperty())
.asString("String length: %d"));