javafx - 使用带有文本字段的子字符串方法时出错
问题描述
当我们尝试获取字符串的前几个字符时出现错误
首先我们尝试删除最后两个违规字符
这产生了我们在尝试获取前几个字符时看到的相同错误
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
解决方案
因为您被自定义警报所吸引,您可能不喜欢我们的回答
我称之为我们听到您敲门但您不能进来您的活动是消耗
好的 Sedrick 建议的答案很好,但我们只使用了 3 行代码
没有自定义警报只有30个字符和一堆消耗哈哈
@FXML
private void onType(){
txtDescription.setOnKeyTyped(event ->{
int maxCharacters = 30;
if(txtDescription.getText().length() > maxCharacters)event.consume();
});
如果算上 FXML 选项卡以及声明和格式,那么是 7 行
推荐阅读
- docker - 如何从 docker 取消设置环境变量?
- docker - 仅在使用 Dockerfile 进行生产时,如何复制文件?
- sqlite - 什么存储选项最适合 2019 年的 phonegap?
- javascript - 多上传进度条
- python - Python:断言不打印错误消息
- c# - 转换 Visual Studio 2017 C# 解决方案/项目以在 Linux 上与 Mono 一起使用?
- pandas - 2 个情节共享一个共同的单一图例
- cgal - 使用 cgal_create_CMakeLists 编译程序无法包含标头
- mongodb - 如何使用 go 压缩 monogdb 集合?
- python - AttributeError:“ListCtrl”对象没有“插入”属性