Я видел много вопросов, похожих на мои, но я не понял, как решить мою проблему, поэтому есть мой код:javaFX - как использовать функцию или объект контроллера с другого контроллера
у меня есть простой основной:
MainClassFXGui.java
public class MainClassFXGui extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("MyProgramMainGuiTab.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Assicurazione");
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
и три FXML файлов, один из них, который содержит два других, по тэгу
<fx:include source="MyTab1.fxml" />
MyProgramMainGuiTab.fxml
...
<TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="5000.0" prefWidth="5000.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab closable="false" text="MyTab1">
<content>
<fx:include source="MyTab1.fxml" />
</content>
</Tab>
<Tab closable="false" text="MyTab2">
<content>
<fx:include source="MyTab2.fxml" />
</content>
</Tab>
</tabs>
</TabPane>
...
и три контроллера:
MyProgramMainGuiTabController.java
....
@FXML
private Label LeftSt;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
LeftSt.setText("");
}
public void setLeftSt(String st){
LeftSt.setText(st);
}
...
MyTab1Controller.java
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
setLeftSt("Can I change the label of the MyProgramMainGuiTabController?");
}
Я пытался таким образом:
MyTab1Controller.java
private MyProgramMainGuiTabController controller;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
controller.setLeftSt("Can I change the label of the MyProgramMainGuiTabController?");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
FXMLLoader fxmlLoader = new
FXMLLoader(getClass().getResource("MyProgramMainGuiTab.fxml"));
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
controller = (MyProgramMainGuiTabController)fxmlLoader.getController();
}
Но у меня есть исключения нулевого указателя или если перенести код instanzialization объектного «контроллера» в функции handleButtonAction, у меня нет какой-либо ошибки, но метка не изменяется.
Может быть, я могу создать статическую сцену и статическую сцену в MainClassFXGui.java? , но тогда я не знаю, как я мог бы использовать их ...
MainClassFXGui.java
public class MainClassFXGui extends Application {
static private Scene scene;
static private Stage stage;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("MyProgramMainGuiTab.fxml"));
this.scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("Assicurazione");
stage.show();
this.stage = stage;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
public static Scene getScene(){
return AssicurazioneFXGui.scene;
}
public static Stage getStage(){
return AssicurazioneFXGui.stage;
}
}
я могу сделать что-то с getScene() или GetStage()? любая идея или предложение?
спасибо всем
Можете ли вы изучить этот вопрос и мой ответ на него, если он уже помогает ?: http://stackoverflow.com/q/21995359/1396265 - Спасибо - Райнер –
Привет, Райнер, да, я уже посмотрел этот вопрос, но мне не помогло: когда я попытался использовать контроллер, у меня было исключение nullpointer, если я вставил код в «inizialize», или ничего не сделал, если я поместил код в функцию. (может быть, я это неправильно понял?) – Matteo
Можете ли вы рассказать о сценарии? это изменение текста ярлыка, нажав на кнопку? – Calips