在单元格中键入后,我想要焦点 自动转到下一个编辑单元格。
怎么做?
我正在使用
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();
}
}
答案 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()}); 祝你好运