【问题标题】:how to getChildname from a vbox [duplicate]如何从 vbox 中获取子名 [重复]
【发布时间】:2014-09-10 18:35:07
【问题描述】:

按下按钮后,我需要在 vbox 中获取图像视图的文件名?这里文件arraylist已经添加到vbox,vbox到gridpane是否可以使用vbox.getChildren()?否则我应该如何进行。 这是一个屏幕截图以便更好地理解:

代码如下:

private ArrayList<Button> btnar;
private VBox vb;
private Button downloadbtn;
@FXML
private ScrollPane displayscroll;
private GridPane gridpane;

public HomeUI_2Controller() {
   Platform.runLater(new Runnable() {

     @Override
     public void run() {
        gridpane = new GridPane();
        displayscroll.setContent(gridpane);

        btnar = new ArrayList<>();
        for (int i = 0; i < filelist2.size(); i++) {
            downloadbtn = new Button("Download");
            btnar.add(downloadbtn);
        }
        int imageCol = 0;
        int imageRow = 0;

        for (int i = 0; i < filelist2.size(); i++) {
            System.out.println(filelist2.get(i).getName());

            image = new Image(filelist2.get(i).toURI().toString());

            pic = new ImageView();
            pic.setFitWidth(130);
            pic.setFitHeight(130);

            pic.setImage(image);
            vb = new VBox();
            vb.getChildren().addAll(pic, (Button) btnar.get(i));

            gridpane.add(vb, imageCol, imageRow);
            GridPane.setMargin(pic, new Insets(2, 2, 2, 2));
            imageCol++;

            // To check if all the 3 images of a row are completed
            if (imageCol > 2) {
                // Reset Column
                imageCol = 0;
                // Next Row
                imageRow++;
            }

        }
         **downloadbtn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent arg0) {
                System.out.println("sssss");
                System.out.println( vb.getChildren().contains(pic.getId()));
            }
        });**
   }
   });
}

【问题讨论】:

  • 您的代码 sn-p 不遵循 JavaFX 模式。阅读tutorial,了解如何在 JavaFX 中使用 FXML 进行编码!正如@James_D 已经指出的那样,您有一个控制器并且在其构造函数中使用Platform.runLater() 确实令人困惑。要了解有关 FXML 和控制器的更多信息,请阅读 Mastering FXML 的示例

标签: java javafx filenames mouseclick-event


【解决方案1】:

这段代码真的不清楚,我不确定我是否完全理解你在这里所做的事情。 (这是一个控制器吗?如果是这样,你为什么要在构造函数内部的 Platform.runLater() 中初始化 UI,而不是在标准的 initialize() 方法中?为什么你的一些 UI 组件显然是在 FXML 中定义的,而其他的在控制器的 Java 代码中定义?这很难理解。)

但是,您似乎有一个名为filelist2List(您没有显示声明),我猜它包含文件名。您创建了一个相同大小的Buttons 列表。我猜这个想法是向 each 按钮添加一个动作事件处理程序,该按钮对filelist2 列表的相应元素执行某些操作。

为此,您可以将事件处理程序添加到第一个 for 循环内的每个按钮:

    for (int i = 0; i < filelist2.size(); i++) {
        downloadbtn = new Button("Download");
        btnar.add(downloadbtn);
        final int index = i ;
        downloadbtn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                // do something with filelist2.get(index);
                // ...
            }
        });
    }

【讨论】:

  • 第一段+1 :)
猜你喜欢
  • 2016-08-25
  • 2013-03-09
  • 1970-01-01
  • 2015-09-12
  • 2017-08-14
  • 2021-07-02
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多