在自定义 class 中分配布尔值时出错 extends from TextField (FXML)
Error assigning a boolean value in a custom class extends from TextField (FXML)
我开始学习 JavaFX 并 运行 解决了这个问题:我有一个 TextBox class extendsfrom 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" />
Caused by: javafx.fxml.LoadException: Error resolving onlyDigits='true', either the event handler is not in the Namespace or there is an error in the script.
但是在 maxLength 的情况下一切正常
我认为这里发生的事情是,因为 属性 onlyDigits
以文本 "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" />
我开始学习 JavaFX 并 运行 解决了这个问题:我有一个 TextBox class extendsfrom 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" />
Caused by: javafx.fxml.LoadException: Error resolving onlyDigits='true', either the event handler is not in the Namespace or there is an error in the script.
但是在 maxLength 的情况下一切正常
我认为这里发生的事情是,因为 属性 onlyDigits
以文本 "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" />