Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx:在按钮事件中从树视图获取滚动条_Javafx_Treeview - Fatal编程技术网

Javafx:在按钮事件中从树视图获取滚动条

Javafx:在按钮事件中从树视图获取滚动条,javafx,treeview,Javafx,Treeview,我想创建一个按钮事件来创建一个列表。在此列表中,滚动条 应该被移动。但是我变成了一个错误,因为查找方法只有在渲染之后才可用 HBox root = new HBox(); Button b = new Button("initList"); b.setOnAction(e-> { ListView<String> list = new ListView<String>(); for (int i = 0; i < 20; i++) {

我想创建一个按钮事件来创建一个列表。在此列表中,滚动条 应该被移动。但是我变成了一个错误,因为查找方法只有在渲染之后才可用

HBox root = new HBox();
Button b = new Button("initList");
b.setOnAction(e->
{
    ListView<String> list = new ListView<String>();
    for (int i = 0; i < 20; i++) 
    {
        list.getItems().add(i+"");
    }
    ScrollBar bar = (ScrollBar) list.lookup(".scroll-bar");
    bar.setValue(0.5);
    root.getChildren().add(list);
});
root.getChildren().add(b);
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
HBox root=新的HBox();
按钮b=新按钮(“初始列表”);
b、 设定动作(e->
{
ListView列表=新建ListView();
对于(int i=0;i<20;i++)
{
list.getItems().add(i+“”);
}
滚动条=(滚动条)列表。查找(“.ScrollBar”);
bar.设定值(0.5);
root.getChildren().add(列表);
});
root.getChildren().add(b);
场景=新场景(根,400400);
初级阶段。场景(场景);
primaryStage.show();

为了确保在布局后调用,您可以使用
runLater
对任务进行排队:

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class LookupTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        HBox root = new HBox();
        Button b = new Button("initList");
        b.setOnAction(e ->
        {
            ListView<String> list = new ListView<String>();
            for (int i = 0; i < 20; i++) {
                list.getItems().add(i + "");
            }
            Platform.runLater(() -> {
                ScrollBar bar = (ScrollBar) list.lookup(".scroll-bar");
                if (bar != null) bar.setValue(0.5);
            });
            root.getChildren().add(list);
        });
        root.getChildren().add(b);
        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

    }
}
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ListView;
导入javafx.scene.control.ScrollBar;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.stage.stage;
公共类LookupTest扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
HBox根=新的HBox();
按钮b=新按钮(“初始列表”);
b、 设定动作(e->
{
ListView列表=新建ListView();
对于(int i=0;i<20;i++){
list.getItems().add(i+“”);
}
Platform.runLater(()->{
滚动条=(滚动条)列表。查找(“.ScrollBar”);
如果(bar!=null)bar.setValue(0.5);
});
root.getChildren().add(列表);
});
root.getChildren().add(b);
场景=新场景(根,400400);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

如果我这样做,那么滚动条总是空的。@jtp我将代码作为最小的工作示例。我在这个示例中使用了
滚动条