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我将代码作为最小的工作示例。我在这个示例中使用了滚动条
。