首页 > 解决方案 > 使用带有文本字段的子字符串方法时出错

问题描述

当我们尝试获取字符串的前几个字符时出现错误
首先我们尝试删除最后两个违规字符
这产生了我们在尝试获取前几个字符时看到的相同错误
On Key Typed 方法是超过 MAX 字符时附加到文本字段,
触发自定义警报。在发布之前,我们已经研究了许多在各种 SO 问题中删除或获取子字符串的方法

输入的字符串永远不会相同,因此我们不知道要替换的具体字符
这是代码和错误的屏幕截图 注意原始文本前面的“o”
我们输入的字符串是“这是一个测试看看有多少哟”
我们试图只获得“这是一个看看有多少的测试”
System.out.println(strNew)就是这样,但是当strNew被添加到文本字段时,“o”显示向上

我们的问题是如何防止这种情况发生?
或者文本字段中出现奇怪文本的原因是什么?

这是要测试的最小代码

public class Atest extends Application {
@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}
public static void main(String[] args) {
    launch(args);
}

控制器

public class testController implements Initializable {
@FXML
TextField txtDesc;
@FXML
private void handleButtonAction(ActionEvent event) {
    txtDesc.setText("Thanks");
}
@FXML
private void descLEN(){
    txtDesc.setOnKeyTyped(event ->{
    int maxCharacters = 10;
    if(txtDesc.getText().length() > maxCharacters)
        event.consume();
    });    
}
@Override
public void initialize(URL url, ResourceBundle rb) { 
}    

我们不知道如何发布 FXML 代码,您只需要一个
id 为 txtDesc 的 TextField 并将 OnKeyTyped 设置为 descLEN

标签: javafxstring-formattingtextfield

解决方案


因为您被自定义警报所吸引,您可能不喜欢我们的回答
我称之为我们听到您敲门但您不能进来您的活动是消耗
好的 Sedrick 建议的答案很好,但我们只使用了 3 行代码
没有自定义警报只有30个字符和一堆消耗哈哈

@FXML
private void onType(){
    txtDescription.setOnKeyTyped(event ->{
    int maxCharacters = 30;
    if(txtDescription.getText().length() > maxCharacters)event.consume();
}); 

如果算上 FXML 选项卡以及声明和格式,那么是 7 行


推荐阅读