点击按钮更改布局

时间:2016-10-08 10:05:17

标签: java javafx interface fxml

我想在点击按钮时更改页面。我可以在程序打开后立即执行此操作,但是当我单击按钮时,我想更改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 {

}

1 个答案:

答案 0 :(得分:0)

你到底是什么问题?你试图解决什么问题?

如果您想更改按钮的布局,我会看到两种可能的解决方案。

  1. 您从场景中删除旧版面(或添加它的位置)。然后将按钮添加到新布局并将新布局添加到场景中。 (虽然我不确定这是否有效,因为SceneGraph只允许添加一次组件)。

  2. 您有多个使用不同按钮准备的布局,并且在每个布局中都有一个按钮调用“addClicked”方法。因此,不同布局中的不同按钮的行为方式相同。 (您也可以随时使用新按钮准备新布局,就像第一个解决方案一样)