我试图限制在 Java fx 8 的表格单元格中键入的字符
我的问题特定于 TextFieldTableCell 和 TextFieldTreeTableCell
我通过添加 Action 监听器来实现独立文本字段的受限文本输入
textfield.textProperty.addListener(new Listener())
有没有办法可以获取用于呈现上述两个类的文本字段,以便我可以重用上面的监听器代码。
如果这是不可能的,是否有办法通过扩展 TextFieldTreeTableCell 来实现受限文本输入
我尝试了这个,但遇到了 NullPointer 异常
DEBUG [JavaFX Application Thread] (RestrictedTreeTableCell.java:23) - coming here Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at >com.sun.javafx.scene.control.skin.TreeTableRowSkin.getCell(TreeTableRowSkin.java:210) at >com.sun.javafx.scene.control.skin.TreeTableRowSkin.getCell(TreeTableRowSkin.java:54)
public class RestrictedTreeTableCell <S,T> extends TextFieldTreeTableCell<S, T>
{
private final int maxChars;
private final String pattern;
private TextField textField;
private RestrictedTextField rtf ;
public RestrictedTreeTableCell(int maxVal,String disallowed)
{
super();
log.debug("coming here");
this.maxChars = maxVal;
this.pattern = disallowed;
}
@Override public void startEdit() {
log.debug("Inside over ridden edit");
if (! isEditable()
|| ! getTreeTableView().isEditable()
|| ! getTableColumn().isEditable()) {
return;
}
if (isEditing()) {
if (textField == null) {
textField = new TextField();
}
rtf = new RestrictedTextField(textField, 5);
textField.textProperty().addListener(rtf);
}
}
}
最佳答案
工作代码在这里
public class RestrictedTreeTableCell <S,T> extends TextFieldTreeTableCell<S, T>
{
private final int maxChars;
private final String pattern;
private TextField textField = new TextField();
private RestrictedTextField rtf ;
private static final Logger log = Logger.getLogger(RestrictedTreeTableCell.class);
public RestrictedTreeTableCell(int maxVal,String disallowed)
{
super();
this.maxChars = maxVal;
this.pattern = disallowed;
if(pattern!=null || pattern.length()>0)
rtf = new RestrictedTextField(textField, maxChars,pattern);
else
rtf = new RestrictedTextField(textField, maxChars);
}
@Override public void startEdit() {
log.debug("Inside over ridden edit");
super.startEdit();
if (isEditing()) {
log.debug("Inside is editing ");
textField.textProperty().addListener(rtf);
if(getItem()!=null)
textField.setText(getItem().toString());
setGraphic(textField);
textField.selectAll();
}
}
}
关于JavaFX 8 文本字段表单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23593926/