JavaFX 8 文本字段表单元格

标签 java javafx-2 javafx-8

我试图限制在 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/

相关文章:

java - 如何正确扩展 Enum

tableview - 如何禁用 tableView 中表列的重新排序?

java - 我们可以在 JavaFX 中实现我们自己的 Material 吗?

JavaFX 8 - 如何将 TextField 文本属性绑定(bind)到 TableView 整数属性

java - 放心。是否可以从请求 json 中提取值?

java - 如何在一条语句中将多行插入到 DB2 中?

java - JSF 中的自刷新组件

css - JavaFX 工具提示定制

java - 如何使用一个 Controller 来实现两种形式?

java - Javafx 中有 RSyntaxTextArea 的替代品吗?