我正在做日历,如果我按下一个/**
* 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>
答案 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...
}
// ...
}
然后用
加载FXMLLabel 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);
// ...