Java FXML - отображать длину строки поля ввода текста - PullRequest
0 голосов
/ 03 июля 2018

Люди, я хочу отобразить длину строки поля ввода текста ниже поля ввода текста. Смотрите скриншот ниже.

По сути, я хочу, чтобы счет отображался динамически, т. Е. Всякий раз, когда пользователь изменяет ввод, счет также должен соответственно изменяться.

Как этого достичь, используя javafx?

Кроме того, как можно ввести значение длины строки в файл FXML?

enter image description here

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

, если ваша метка называется 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>

обратите внимание на onKeyTyped = "# Calculate" в TextField

0 голосов
/ 03 июля 2018

Bindings.length возвращает IntegerBinding, содержащее длину значения sting в StringProperty. asString позволяет форматировать значение в виде строки:

label.textProperty().bind(Bindings.length(textField.textProperty())
                                  .asString("String length: %d"));
0 голосов
/ 03 июля 2018

Вам нужно будет сделать это с привязкой. Добавьте метку под вашим 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);

Если вы хотите избежать конкатата для каждого типизированного поля, используйте две метки, одну для StringLength: и одну рядом с ней для числа символов, тогда будет обновлена ​​только эта метка.

...