强制tableView自动编辑下一个单元格

时间:2017-11-01 13:46:37

标签: javafx

在单元格中键入后,我想要焦点 自动转到下一个编辑单元格。

怎么做?

我正在使用

Whole

但不幸的是,它在setOnEditCommit

中无效

当通过单击tableView外部的按钮调用它时,它可以正常工作。我的印象是在setOnEditCommit之后它将最后一行单元格放在上面。

如何解决这个问题?

感谢' s

属性文件

tv.getSelectionModel (). select (row + 1);
tv.edit (row + 1, name); // <--- here not work edition next line
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.image.ImageView;


public class Lin {

        private SimpleStringProperty number;
        private SimpleStringProperty name;


        public Lin(String number, String name ) {
            this.number    = new SimpleStringProperty(number);
            this.name      = new SimpleStringProperty(name);
        }


        public SimpleStringProperty numberProperty() {
            return number;
        }

        public String getNumber() {
            return number.getValue();
        }

        public SimpleStringProperty nameProperty() {
            return name;
        }

        public String getName() {
            return name.getValue();
        }

    }

2 个答案:

答案 0 :(得分:0)

我认为表格编辑的烘焙行为会在编辑提交后将编辑单元格设置为null。我的猜测是,在onEditCommit处理程序被调用之后会发生这种情况,因此您编辑下一个单元格的调用基本上已被撤销。

解决此问题的一种(不太令人满意的)方法是将调用包装到tv.edit(...)中的Platform.runLater(...),这会将其委托给在挂起事件发生后执行的runnable。处理:

  // tv.edit(row+1, name);
  Platform.runLater(() -> tv.edit(row+1, name)); 

警告:如下所述,此方法不可靠,因此如果这是关键任务,则不应使用此方法。如果您只是在寻找方便用户的东西,如果不完全可靠,那么这可能就足够了。除非你愿意重写表格视图皮肤,否则这可能会很好......

答案 1 :(得分:0)

如果下一个单元格中有某些东西可以将焦点拉到它上面,你应该查看.requestFocus()方法,例如,如果你只能输入4个字母就可以使用setOnAction(event-&gt; {if( checkLength())cell2.requestFocus()}); 祝你好运