我想在点击按钮时更改页面。我可以在程序打开后立即执行此操作,但是当我单击按钮时,我想更改Main类'BorderPane的中心。 (我有很多按钮,我想和他们一起去不同的控制器)。 我想改变主控制器的中心而不改变它。我尝试了很多东西但却做不到。在操作方法上,addClicked正在运行,但不会将中央控制器更改为另一个控制器。
我有Main.class,MainController.java和AddTaskController.java。
Main.class:
package application;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
public class Main extends Application {
private Stage window;
private BorderPane layout;
@Override
public void start(Stage primaryStage) throws Exception{
window = primaryStage;
try {
MainController con1 = showMainView();
setLayout(con1.setLay("addssss.fxml"));
} catch(Exception e) {
e.printStackTrace();
}
}
public void setLayout(HBox lay){
layout.setCenter(lay);
}
private MainController showMainView() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("MainInterface.fxml"));
layout = loader.load();
Scene scene = new Scene(layout);
window.setScene(scene);
window.show();
return loader.getController();
}
public static void main(String[] args) {
launch(args);
}
}
MainController.java:
package application;
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.HBox;
public class MainController {
@FXML
void addClicked(ActionEvent e) throws IOException{
}
public HBox setLay(String kaynak) throws IOException{
HBox layout;
FXMLLoader loader = new FXMLLoader();
loader.setLocation(AddTaskController.class.getResource(kaynak));
layout = loader.load();
return layout;
}
}
AddTaskController.java(没有代码):
package application;
public class AddTaskController {
}
答案 0 :(得分:0)
你到底是什么问题?你试图解决什么问题?
如果您想更改按钮的布局,我会看到两种可能的解决方案。
您从场景中删除旧版面(或添加它的位置)。然后将按钮添加到新布局并将新布局添加到场景中。 (虽然我不确定这是否有效,因为SceneGraph只允许添加一次组件)。
您有多个使用不同按钮准备的布局,并且在每个布局中都有一个按钮调用“addClicked”方法。因此,不同布局中的不同按钮的行为方式相同。 (您也可以随时使用新按钮准备新布局,就像第一个解决方案一样)