.getSource()在javafx上返回null值

时间:2017-03-27 23:01:20

标签: java javafx scenebuilder

我正在做日历,如果我按下一个/** * build index * * @var array $index cumulative index * @var array $array array to add to index * @var array $uKey array of unique key names * @var array $template array of 'undefined' elements * @var string $char key to hold 'amount' value from $array */ function index(&$index, $array, $uKey, $template, $char) { foreach($array as $a) { $key = json_encode(array_intersect_key($a, $uKey)); $val = isset($index[$key]) ? $index[$key] : []; $index[$key] = array_merge($template, $val, [$char => $a['amount']]); } } // init empty index $index = []; // define vector $uKey = array_flip(['group_id', 'user_id', 'unit_id']); // define template $template = ['A' => 'undefined', 'B' => 'undefined']; // add arrays to index index($index, $array1, $uKey, $template, 'A'); index($index, $array2, $uKey, $template, 'B'); // format index to reqquested output $result = []; foreach($index as $key=>$val) { $result[] = array_merge(json_decode($key, true), $val); } print_r($result) ,会出现第二个窗口以进行新的任命。

我所有的日子里都有一种接收活动的方法。当我尝试从此方法(Label

获取信息时
public String aux

并试着在这个中使用:

public void labClick(MouseEvent event){

    try {

        Label aab=(Label) event.getSource();
        aux=aab.getText();
        Parent root;
        root = FXMLLoader.load(getClass().getResource("/application/cita.fxml"));
        Stage stage = new Stage();
        stage.setTitle("New Appoinment");
        stage.setScene(new Scene(root, 500, 500));
        stage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }   
}

打印public void insertCita(Event event){ String dia; String inic; String fin; String stuf; Appoinment app; inic=startTime.getText(); fin=finishTime.getText(); stuf=stuff.getText(); System.out.println(aux); } 变量时,我得到null值。

有什么想法吗?

编辑:

这是cita .fxml文件

aux

这是主要的.fxml文件:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="185.0" prefWidth="341.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="application.Main.">
  <!-- TODO Add Nodes -->
  <children>
    <VBox layoutX="0.0" layoutY="0.0" prefHeight="185.0" prefWidth="341.0">
      <children>
        <TextField fx:id="startTime" prefHeight="35.0" prefWidth="341.0" text="Type starting time" />
        <TextField fx:id="finishTime" prefHeight="35.0" prefWidth="341.0" text="Type finishing time" />
        <TextField fx:id="stuff" prefHeight="35.0" prefWidth="341.0" text="Type stuff to do" />
        <Button fx:id="goBut" contentDisplay="LEFT" mnemonicParsing="false" onMouseClicked="#insertCita" prefHeight="52.0" prefWidth="90.0" text="Go" />
      </children>
    </VBox>
  </children>
</AnchorPane>

1 个答案:

答案 0 :(得分:0)

aux值在labClick方法中设置,该方法在主FXML文件的控制器中调用;然而,您正试图在cita.fxml的控制器中访问它,它从未被初始化。

对于来自两个FXML文件的控制器使用相同的类,这将始终导致这种混淆,因为跟踪哪些变量在哪些控制器中初始化是非常困难的。我强烈建议您为每个FXML文件的控制器使用不同的类。

无论哪种方式,您都需要在加载cita.fxml时将值从一个控制器传递到另一个控制器。 Passing Parameters JavaFX FXML概述了执行此操作的方法,但您可以简要地定义CitaController类以与cita.fxml一起使用,并为其提供setAux()方法:

public class CitaController {

    private String aux ;

    public void setAux(String aux) {
        this.aux = aux ;
    }

    @FXML
    private void insertCita(Event event){ 
        // existing code...
    }

    // ...
}

然后用

加载FXML
Label aab=(Label) event.getSource();
aux=aab.getText();
FXMLLoader loader = new FXMLLoader(getClass().getResource("/application/cita.fxml"));
Parent root = loader.load();

CitaController citaController = loader.getController();
citaController.setAux(aux);

// ...