java - 在从 TextField (FXML) 扩展的自定义类中分配布尔值时出错
问题描述
我开始学习 JavaFX 并遇到了这个问题:我有一个 TextBox 类从 TextField 扩展
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
public class TextBox extends TextField {
private int maxLength = 255;
private boolean onlyDigits;
public TextBox(){
super();
}
@Override
public void replaceText(int start, int end, String text) {
String oldText = getText();
super.replaceText(start, end, text);
if (!verify()){
setText(oldText);
}
}
@Override
public void replaceSelection(String text) {
String oldText = getText();
super.replaceSelection(text);
if (!verify()){
setText(oldText);
}
}
private boolean verify() {
String text = getText();
if (text =="")
return true;
if (text.length() > maxLength) {
return false;
}
if (onlyDigits && !Converter.StringToInt(text).isSuccess()){
return false;
}
return true;
}
public int getMaxLength() {
return maxLength;
}
public void setMaxLength(int maxLength) {
if (maxLength >= 0)
this.maxLength = maxLength;
}
public void setOnlyDigits(boolean onlyDigits) {
this.onlyDigits = onlyDigits;
}
public boolean isOnlyDigits() {
return onlyDigits;
}
}
使用以下 FXML 时,出现错误:
<TextBox
GridPane.columnIndex="0" GridPane.rowIndex="1"
maxLength="2"
onlyDigits="true"
fx:id="tbNumberVertex" />
原因:javafx.fxml.LoadException:解析 onlyDigits='true' 时出错,要么事件处理程序不在命名空间中,要么脚本中有错误。
但在 maxLength 的情况下,一切正常
解决方案
我认为这里发生的事情是,因为该属性onlyDigits
以 text 开头"on"
,所以 FXML 解析器假设它是一个事件处理程序属性。(例如,onAction
。)所以它假设分配的值,true
,是指在 FXML 的脚本中定义的函数。
(对于它的价值,我认为这是一个错误。)
更改属性的名称,例如useOnlyDigits
通过更改方法的名称:
public void setUseOnlyDigits(boolean onlyDigits) {
this.onlyDigits = onlyDigits;
}
public boolean isUseOnlyDigits() {
return onlyDigits;
}
并相应地更新 FXML:
<TextBox
GridPane.columnIndex="0" GridPane.rowIndex="1"
maxLength="2"
useOnlyDigits="true"
fx:id="tbNumberVertex" />
推荐阅读
- highcharts - 需要使用堆叠和分组的柱形图进行深入研究
- angular - Angular 6 RxJS6 observable 未按正确顺序返回数据
- c++ - 如何将这些元素添加到字符串
- java - 审核实体的 Dynamics 365 RetrieveAttributeChangeHistory OData 函数
- python - 避免在 django rest 框架序列化程序中验证外键
- python - 如何使用 def 函数创建没有重复的随机列表
- php - 使用 AJAX 更改 PHP 语言 $_SESSION 变量且不重新加载页面
- amazon-web-services - 如何将 .pem 文件导入 AWS Lambda 函数
- c++ - std::map 使用。这里有什么问题?核心转储?我做错了什么?
- flutter - Flutter 方法通道传递 JSON