JavaFx和场景构建器

时间:2016-01-10 23:06:17

标签: java javafx tabs parameter-passing tabpanel

我做了一个mainEntredController,其中包含一个带有两个标签的TabPane(HomeController)和(PatientController),MainEntred Controle这两个标签之间的参数通道但是我有liitls issu,标签donet重新组合Parent(MainEntredController)或彼此。它在这条线上回复了一个错误 *** labelpatient.setText(mainec.LoadtxtFromlabelhometabhome()); ****** 我们的想法是从第一个标签中获取文本,以便在第二个标签中的标签中显示它

听取我的代码 第一个是MainEntred Class the Container

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 HomeController {

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;
  }
 }

MainEntred的FXML文件

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

我猜这两个人都在喋喋不休地提出任何建议如何解决它请 我不知道为什么我在行声明的情况下有java.lang.NullPointerException,因为他无法获得源代码(未知来源)

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你想在控制器之间进行通信。好吧,这可以很容易。

在你的主要类型的东西喜欢这个:

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

答案 1 :(得分:0)

我发现错了。问题是,在两个Tabs的MainController中的声明中,我们将fx:id声明放在fxml文件中 并添加单词&#34; Controller&#34;

像这样

    @FXML private HomeController homeController;
    @FXML  private PatientController patientController;

fx:id =&#34; home&#34; 第二个包括fx:id =&#34;患者&#34;