Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFx ans场景生成器中选项卡之间的通信_Java_Javafx_Tabs_Parameter Passing_Tabpanel - Fatal编程技术网

JavaFx ans场景生成器中选项卡之间的通信

JavaFx ans场景生成器中选项卡之间的通信,java,javafx,tabs,parameter-passing,tabpanel,Java,Javafx,Tabs,Parameter Passing,Tabpanel,我制作了一个MainEnterdController,其中包含一个带有两个选项卡(HomeController)和(PatientController)的选项卡窗格,MainEnterdController控制这两个选项卡之间的参数通道,但我有一个问题,即选项卡不能重新设置父选项卡(MainEnterdController)或彼此。它在这一行中重复了一个错误 ***labelpatient.setText(mainec.LoadtxtFromlabelhometabhome())****** 其

我制作了一个MainEnterdController,其中包含一个带有两个选项卡(HomeController)和(PatientController)的选项卡窗格,MainEnterdController控制这两个选项卡之间的参数通道,但我有一个问题,即选项卡不能重新设置父选项卡(MainEnterdController)或彼此。它在这一行中重复了一个错误 ***labelpatient.setText(mainec.LoadtxtFromlabelhometabhome())****** 其思想是从第一个选项卡获取文本,并在第二个选项卡的标签中显示

这是我的密码 第一个是容器的mainterred类

public class MainEntredController  {
@FXML MenuItem closemi;
@FXML  HomeController homecontroller;
@FXML  PatientController patientcontroller;


 public void initialize(URL location, ResourceBundle resources) {
    System.out.println("Application Started");
homecontroller.intit(this);
patientcontroller.init(this);

}



public void ClickMenuItemClose(){
    System.exit(0);
}


public String LoadtxtFromlabelhometabhome() {
//  System.out.println(homecontroller.labelhome.getText());
    return  homecontroller.labelhome.getText();
}

public void setTabpatientlabel(String text) {
    //patientcontroller.labelpatient.setText(text);

}
}

第二个是HomeController的第一个选项卡

 public class PatientController {

 public MainEntredController mainec;

@FXML public Label labelpatient;
@FXML private TextField tfpatient;
@FXML private Button savepatient;
@FXML private Button loadpatient;


  public void btnSavePatientClicked(ActionEvent event){
System.out.println("le boutton save Patient est cliqué");
labelpatient.setText(tfpatient.getText());
   }

   public void btnLoadPatientClicked(ActionEvent event){
System.out.println("le boutton Load patient est cliqué");
labelpatient.setText(mainec.LoadtxtFromlabelhometabhome());
   }

 public void init(MainEntredController mainEntredController) {
  mainec = mainEntredController;
  }
 }
公共类家庭控制器{

public MainEntredController mainec;

@FXML public Label labelhome;
@FXML private TextField tfhome;
@FXML private Button savehome;
@FXML private Button sendhome;
//public HomeController(){}

 public void btnSaveHomeClicked(ActionEvent event){
System.out.println("le boutton save home est cliqué");
labelhome.setText(tfhome.getText());
 }
public void btnSendHomeClicked(ActionEvent event){
System.out.println("le boutton send home est cliqué");
// send data to tab patient
 mainec.setTabpatientlabel(labelhome.getText());
  }

public void intit(MainEntredController mainEntredController) {
mainec = mainEntredController;
}

}
第三个是第二个选项卡PatientController

 public class PatientController {

 public MainEntredController mainec;

@FXML public Label labelpatient;
@FXML private TextField tfpatient;
@FXML private Button savepatient;
@FXML private Button loadpatient;


  public void btnSavePatientClicked(ActionEvent event){
System.out.println("le boutton save Patient est cliqué");
labelpatient.setText(tfpatient.getText());
   }

   public void btnLoadPatientClicked(ActionEvent event){
System.out.println("le boutton Load patient est cliqué");
labelpatient.setText(mainec.LoadtxtFromlabelhometabhome());
   }

 public void init(MainEntredController mainEntredController) {
  mainec = mainEntredController;
  }
 }
和mainterred的FXML文件

<fx:include id="homecontroller" source="home.fxml" />
<fx:include id="patientcontroller" source="patient.fxml" />

我想这两个人正在制造问题,有什么建议吗
我不知道为什么我在declarred erlier行出现java.lang.NullPointerException,他无法获取源代码(未知源代码)

如果我理解正确,那么您希望在控制器之间进行通信。嗯,这可以很容易地做到

在您的主类型中,类似以下内容:

FXMLLoader loader = new FXMLLoader(Main.class.getResource("your.fxml"));
Parent node = loader.load(); // this loads view 
YourController instance = loader.getController();
some_class.initialize(instance);

很好,我发现了问题所在。问题是在两个选项卡的主控制器中的声明中,我们将声明的fx:id放在了fxml文件中 并加上"Controller"一词

像这样

    @FXML private HomeController homeController;
    @FXML  private PatientController patientController;
fx:id=“主页”
第二个包括fx:id=“patient”

我很确定代码在到达该行之前会失败,因为控制器字段名是错误的,请参见fxml没有使用
fx
命名空间中的
id
属性…我需要更改什么?在该示例中,他们建议从两个includs选项卡中创建相同的源,这会给出一个错误,应该更改什么d i do pleaseNested控制器的使用方法如下所述:。它们没有告诉您的是,如何选择注入控制器的字段的名称(请参阅我在前面的评论中链接的问题的答案)。现在无法就问题的其他部分提供建议,因为您描述了一个错误,如果使用了您发布的代码(line
homecontroller.intit(this);
mainterdcontroller中的
。initialize
应该生成一个NPE,而不是前面提到的那一行)。非常感谢,我将对嵌套控制器进行一些研究,以解决它不起作用的问题,它会在主FXML文件中出现loadException。它起作用,但您必须为FXMLLoader提供正确的URI