JavaFX TextArea限制

时间:2016-04-14 02:00:15

标签: javafx

如何设置文本区域限制。我已经创建了一个计数器来跟踪文本区域中的字符数量,现在我只需要在if语句中添加一些内容,使其无法在文本区域中放置任何文本。我该怎么做?

2 个答案:

答案 0 :(得分:9)

创建计数器没有意义:文本区域中的字符数始终可以从textArea.getText().length()获得,或者,如果您需要可观察的值,Bindings.length(textArea.textProperty())

要限制文本区域中的字符数,请设置TextFormatter,如果它们会导致文本超出最大值,则会使用过滤器否决对文本的更改:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.stage.Stage;

public class LimitedTextArea extends Application {

    @Override
    public void start(Stage primaryStage) {
        final int MAX_CHARS = 15 ;

        TextArea textArea = new TextArea();

        textArea.setTextFormatter(new TextFormatter<String>(change -> 
            change.getControlNewText().length() <= MAX_CHARS ? change : null));



        Scene scene = new Scene(textArea, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

答案 1 :(得分:-1)

我尝试使用静态Integer使用此问题的解决方案对您的问题进行编程,然后将其强制转换为您的void方法以具有递增功能。

它只是连续添加字符的长度+ = 6 //6 because the newLine is = +1并且限制为charLimit = 5;,那么如果您输入的长度为5,或者该语句为true,则它将复制来自textArea的文本并添加+"\n",该文本将从textArea移至newLine,则charLimit将增加6,如果语句为TRUE,则为charLimit += 6;

charLimit = 5;

    textArea.textProperty().addListener((ObservableValue <? extends String> obs,String oVal, String nVal)-> {

        String prevText = tContent.getText()+"\n";
        int inputLength = nVal.length();


            if(charLimit == inputLength){
                tContent.setText(prevText);
                charLimit += 6;
                print("\nadd 6!");
            }
            else{
                print("\nText: "+inputLength);
            }


    });

注意:我仅在最终用户输入一次且没有退格的情况下使用此功能,而从Integer进行的增量是静态的,但是您可以按条件及其单向方法进行设置。