我在点击树视图的项目时尝试加载新的FXML。
嗯,有一部分MainApp,其中加载了FXML。 在这里,我实现了一个根视图,其中将加载其他视图。
当有人点击节点" voir mes客户端"我尝试加载 clientView.fxml 在树视图上。该视图将包含在函数 mainMenuView
中 menuView.fxml 加载的视图中在类 TreeLoadingEventHandler 中,函数 handle 加载在控制器中实现的树视图,最后将树视图加载到函数 mainMenuView 中。
public class MainApp extends Application {
private Stage primaryStage;
private BorderPane rootView;
private static AnchorPane menuView;
public MainApp()
{}
@Override
public void start(Stage primaryStage) {
this.primaryStage=primaryStage;
this.primaryStage.setTitle("MaK@mpta");
launchRootLayout();
mainMenuView();
}
public void launchRootLayout()
{
try {
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/rootView.fxml"));
rootView = (BorderPane)loader.load();
Scene scene = new Scene(rootView);
//scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public void mainMenuView()
{
try
{
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/menuView.fxml"));
menuView=(AnchorPane)loader.load();
rootView.setCenter(menuView);
MenuViewController controller = loader.getController();
controller.setMainApp(this);
//controller.loadItems();
TreeLoadingEventHandler Tree=new TreeLoadingEventHandler(controller);
Tree.handle(null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void showClient()
{
try
{
FXMLLoader loader=new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/clientView.fxml"));
AnchorPane clientView=(AnchorPane)loader.load();
AnchorPane.setLeftAnchor(clientView, 220.0);
menuView.getChildren().add(clientView);
}
catch(Exception e)
{
e.printStackTrace();
}
}
private class TreeLoadingEventHandler implements EventHandler<ActionEvent> {
private MenuViewController controller;
TreeLoadingEventHandler(MenuViewController controller) {
this.controller = controller;
}
@Override
public void handle(ActionEvent t) {
controller.loadItems();
}
}
}
这是实现控制器的java类 function setMainApp 检索控制器的引用,我可以从中调用 MainApp 的函数 showClient 。 我已经实现了一个单元工厂 setfactoryCell 来调用clientView.fxml的加载,当有人点击item&#34; voir mes clients&#34;。
public class MenuViewController {
@FXML
TreeView <String> treeview;
// Reference to the main application.
private MainApp mainApp;
// public MenuViewController()
@SuppressWarnings("unchecked")
public void initialize(URL location, ResourceBundle resources)
{
loadItems();
}
@SuppressWarnings("unchecked")
public void loadItems()
{
TreeItem<String>root=new TreeItem<>("Root");
TreeItem<String> clients=new TreeItem<>("Clients");
TreeItem<String> addClient=new TreeItem<>("Ajouter Client");
TreeItem<String> seeClient=new TreeItem<>("Voir mes clients");
TreeItem<String> articles=new TreeItem<>("Articles");
TreeItem<String> devis=new TreeItem<>("Devis");
root.getChildren().addAll(clients,articles,devis);
clients.getChildren().addAll(addClient,seeClient);
root.setExpanded(true);
treeview.setRoot(root);
treeview.setShowRoot(false);
setfactoryCell();
}
private void setfactoryCell()
{
treeview.setCellFactory(tree -> {
TreeCell<String> cell = new TreeCell<String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty) ;
if (empty) {
setText(null);
} else {
setText(item);
}
}
};
cell.setOnMouseClicked(event -> {
if (! cell.isEmpty()) {
TreeItem<String> treeItem = cell.getTreeItem();
// do whatever you need with the treeItem...
if (treeItem.getValue().equals("Voir mes clients"))
{
selectViewClient();
}
}
});
return cell ;
});
}
/**
* Is called by the main application to give a reference back to itself.
*
* @param mainApp
*/
public void selectViewClient()
{
mainApp.showClient();
}
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
}
}
这件事不起作用。
即使以前工作过的树视图也不再适用。
我可以帮忙吗?
当我点击项目&#34; voir mes客户&#34; ?
很抱歉发布了这么多代码,但我不知道如何缩短代码。
谢谢