背景
使用JavaFX,我并排呈现TableView
和Button
。
该表包含许多条目,这些条目多于表格大小。因此,TableView会自动显示向下滚动的滚动条。
问题
我想使用按钮向下滚动表格。按下按钮,向下滚动表格5个条目。我找到了scrollTo()
方法,这对于任务来说已经足够了,但我需要一个索引来滚动。我没有,据我所知,没有“getfirstvisibleindex”方法(或类似的东西,你明白了)。
如何确定要滚动到的表行索引?
修改
感谢大家帮助我。为了完整起见,我还发布了“我的”最终解决方案,该解决方案基于/复制在下面提供的链接Link1和Link2上。以下方法是作为TableView的扩展版本的一部分实现的,并且将由按钮调用。 (边节点:我不确定是否真的有必要检查结束是否正确。)
public void scrollbartest(){
TableViewSkin skin = (TableViewSkin) getSkin();
VirtualFlow vf = null;
ObservableList<Node> kids = skin.getChildren();
if (kids != null && !kids.isEmpty())
{
vf = (VirtualFlow)kids.get(1);
}
if (vf == null) { return; }
if (vf.getFirstVisibleCell() == null) { return; }
int first = vf.getFirstVisibleCell().getIndex();
int last = vf.getLastVisibleCell().getIndex();
int numberofrows = this.getItems().size();
if(last != numberofrows-1){
this.scrollTo(first+1);
}
}
答案 0 :(得分:0)
我正在使用tableview教程作为示例:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
TableView由您定义的某种对象类型的可观察列表支持。在本教程中,他们使用:
final ObservableList<Person> data = FXCollections.observableArrayList(
new Person("Jacob", "Smith", "jacob.smith@example.com"),
new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
new Person("Ethan", "Williams", "ethan.williams@example.com"),
new Person("Emma", "Jones", "emma.jones@example.com"),
new Person("Michael", "Brown", "michael.brown@example.com")
);
与行一起:
table.setItems(data);
数据列表对象有一个大小方法,对您的案例很有用。在按钮操作中,您可以查找列表的大小并向前设置scrollTo()索引5个位置。只需跟踪按钮操作定义之外的起始索引。