如何设置文本区域限制。我已经创建了一个计数器来跟踪文本区域中的字符数量,现在我只需要在if语句中添加一些内容,使其无法在文本区域中放置任何文本。我该怎么做?
答案 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进行的增量是静态的,但是您可以按条件及其单向方法进行设置。