将参数传递给javafx控制器方法不起作用

时间:2016-07-12 19:44:10

标签: java javafx controllers

我在 fxml 文件中存储了 Pane 组件。我将此组件导入另一个场景,我希望此组件显示自动生成的信息。所以我搜索了这个确切的问题,我发现了这个:Passing parameters to a controller when loading an FXML。他们这样做:

 private void addReservation(Reservation r) {
        try {
            FXMLLoader fxmloader = new FXMLLoader(getClass().getResource("/views/item_reserva.fxml"));
            Pane client = (Pane) fxmloader.load();
            Item_reservaController controller = fxmloader.<Item_reservaController>getController();
            controller.init(r);
            flowPane.getChildren().add(client);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

我将组件加载到 Parent 类型,在这种情况下 Pane 。然后我调用它的控制器并初始化组件,最后在 Flowpane 中显示 Pane

这是init方法的作用:

public void init(Reservation r) {
    this.reservation = r;
    labelCountry = new Label(r.getClients().getFirst().getCountry());
    labelRoom = new Label(Integer.toString(r.getRooms().size()));
    labelClient = new Label(Integer.toString(r.getClients().size()));
}

我猜这个问题与我绘制的对象与我改变的控制器不同有关,所以它不会改变真实组件内的信息。

1 个答案:

答案 0 :(得分:1)

由于在加载fxml后调用了init方法,因此在该方法中创建的Label不太可能被添加到场景中。

  

并且fxml文件中没有定义标签。

由于场景已包含相应的Label,因此请使用这些Label而不是创建新的Label。如果setText已成功注入控制器,只需使用public void init(Reservation r) { this.reservation = r; labelCountry.setText(r.getClients().getFirst().getCountry()); labelRoom.setText(Integer.toString(r.getRooms().size())); labelClient.setText(Integer.toString(r.getClients().size())); } 分配内容:

while (<>){
    my ($let, $start, $stop, $num) = split;
    if ( defined($oldLet) ){
        if ($let eq $oldLet and $start == $oldStart and $stop == $oldStop) {
            print $chr,"\t",$start,"\t",$stop,"\t",$num + $oldNum, "\n";
        }
    }
    my $oldLet = $let;
    my $oldStart = $start;
    my $oldStop = $stop;
    my $oldNum = $num;
}