选择JavaFX8中树状视图中显示的第一项

选择JavaFX8中树状视图中显示的第一项,javafx,javafx-8,Javafx,Javafx 8,我有一个带有若干项的TreeTableView控件。用户可以使用侧滚动条移动到桌子的任何部分。我如何知道表格显示的第一项是什么?我是说,我们看到的第一件东西。我一直在研究这个控件提供的方法,我看到scrollTo根据我们指定的订单号显示一个项目,但我没有找到类似getfirstItemShowed的东西。我想对于TableView控件,它的工作原理应该是一样的,对吧?我使用JavaFX8。只是为了好玩: (请注意,如果有剖切线,则可以选择下一行,并且第一行有时隐藏在列下) 导入javafx.ap

我有一个带有若干项的
TreeTableView
控件。用户可以使用侧滚动条移动到桌子的任何部分。我如何知道表格显示的第一项是什么?我是说,我们看到的第一件东西。我一直在研究这个控件提供的方法,我看到
scrollTo
根据我们指定的订单号显示一个项目,但我没有找到类似
getfirstItemShowed
的东西。我想对于
TableView
控件,它的工作原理应该是一样的,对吧?我使用JavaFX8。

只是为了好玩:

(请注意,如果有剖切线,则可以选择下一行,并且第一行有时隐藏在列下)

导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.stage.stage;
导入javafx.beans.property.ReadOnlyStringWrapper;
导入javafx.scene.control.TreeTableColumn;
导入javafx.scene.control.TreeTableColumn.CellDataFeatures;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeTableView;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
setTitle(“树视图示例”);
TreeItem rootItem=新的TreeItem(“收件箱”);
setExpanded(true);
对于(int i=1;i<888;i++){
TreeItem=新的TreeItem(“消息”+i);
rootItem.getChildren().add(项);
}
TreeTableColumn=新的TreeTableColumn(“列”);
列宽(150);
column.setCellValueFactory((CellDataFeatures p)->新的ReadOnlyStringWrapper(
p、 getValue().getValue());
TreeTableView TreeTableView=新的TreeTableView(根项目);
treeTableView.getColumns().add(列);
初始阶段。设置场景(新场景(treeTableView,300250));
primaryStage.show();
Platform.runLater(()->{
ScrollBar verticalBar=(ScrollBar)treeTableView.lookup(“.ScrollBar”);
verticalBar.valueProperty().addListener(新的ChangeListener()){
@凌驾
公共空间改变(ObservalEvalue只是为了好玩:

(请注意,如果有剖切线,则可以选择下一行,并且第一行有时隐藏在列下)

导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.stage.stage;
导入javafx.beans.property.ReadOnlyStringWrapper;
导入javafx.scene.control.TreeTableColumn;
导入javafx.scene.control.TreeTableColumn.CellDataFeatures;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeTableView;
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
setTitle(“树视图示例”);
TreeItem rootItem=新的TreeItem(“收件箱”);
setExpanded(true);
对于(int i=1;i<888;i++){
TreeItem=新的TreeItem(“消息”+i);
rootItem.getChildren().add(项);
}
TreeTableColumn=新的TreeTableColumn(“列”);
列宽(150);
column.setCellValueFactory((CellDataFeatures p)->新的ReadOnlyStringWrapper(
p、 getValue().getValue());
TreeTableView TreeTableView=新的TreeTableView(根项目);
treeTableView.getColumns().add(列);
初始阶段。设置场景(新场景(treeTableView,300250));
primaryStage.show();
Platform.runLater(()->{
ScrollBar verticalBar=(ScrollBar)treeTableView.lookup(“.ScrollBar”);
verticalBar.valueProperty().addListener(新的ChangeListener()){
@凌驾

更改公众假期(ObservaleValueJavaFX版本?如果您使用的是JavaFX 9+,并且您使用的是默认皮肤,那么您可以通过访问所需信息。但是没有提供所需功能的公共、保证始终工作的API。两个人(他们都不是您)编辑了您的问题,以说明您正在使用JavaFX 8。在编辑之前问题没有说明您使用的是哪个版本的JavaFX。如果您使用的是不同的版本,请将问题更正。@Slaw(注意您不知道:)-只是想知道他们为什么要编辑fx8?问题中没有任何暗示,fx8已经过时了…第一次编辑应该被拒绝,IMO@kleopatra同意。我试图拒绝它…JavaFX版本?如果您使用的是JavaFX9+,并且您使用的是默认皮肤,您可以通过访问所需的信息。但是没有公共的,保证始终工作的API,提供您想要的功能。两个人(他们都不是您)编辑了您的问题,说明您使用的是JavaFX 8。在编辑之前,问题没有说明您使用的是哪个版本的JavaFX。如果您使用的是不同的版本,请更正您的问题。@Slaw(注意,你不知道:)-只是想知道他们为什么编辑包含fx8?问题中没有任何提示,fx8已经过时了…第一次编辑应该被拒绝,IMO@kleopatra同意,我试着拒绝。。。
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableView;


public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        primaryStage.setTitle("Tree View Sample");
        TreeItem<String> rootItem = new TreeItem<String> ("Inbox");
        rootItem.setExpanded(true);

        for (int i = 1; i < 888; i++) {
            TreeItem<String> item = new TreeItem<String> ("Message" + i);
            rootItem.getChildren().add(item);
        }
        TreeTableColumn<String, String> column = new TreeTableColumn<>("Column");
        column.setPrefWidth(150);
        column.setCellValueFactory((CellDataFeatures<String, String> p) -> new ReadOnlyStringWrapper(
                p.getValue().getValue()));
        TreeTableView<String> treeTableView = new TreeTableView<>(rootItem);
        treeTableView.getColumns().add(column);
        primaryStage.setScene(new Scene(treeTableView, 300, 250));
        primaryStage.show();

        Platform.runLater(()->{
            ScrollBar verticalBar = (ScrollBar) treeTableView.lookup(".scroll-bar");
            verticalBar.valueProperty().addListener(new ChangeListener<Number>() {
                @Override
                public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                    int currentRow = 0;
                    if(newValue.doubleValue()<1){
                        currentRow =(int)((newValue.doubleValue()*treeTableView.getExpandedItemCount())-(newValue.doubleValue()*verticalBar.getVisibleAmount())*treeTableView.getExpandedItemCount());
                    }else {
                        currentRow =(int)(treeTableView.getExpandedItemCount()-verticalBar.getVisibleAmount()*treeTableView.getExpandedItemCount());
                    }
                    System.out.println(currentRow);
                }
            });
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
}