我正在創建一個程序,其頂部有一排按鈕,一側有一排按鈕。 頂部按鈕控制視圖,側面按鈕控制視圖中要引用的對象。JavaFX:如何使用新值更新邊界窗格的中心視圖
我的主/根視圖是一個borderpane。
重點是,當我點擊這些按鈕中的任何一個時,在我的MainController中更改一個值,然後用這些新值重新加載中心視圖。我認爲這會很簡單,寫一個方法可以改變這個值,然後根據這些值設置一個新的中心。
但是,當我測試它時,它可以顯示我已經要求它顯示的兩個值,但每次運行時都會給我一大堆紅色的錯誤代碼。
我MainViewController如下所示:
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class MainViewController extends Application {
@FXML
private Button cabin1;
@FXML
private Button cabin2;
@FXML
private Button tab1;
@FXML
private Button tab2;
@FXML
public void setCabinOne() throws IOException {
cabinIndex=1;
setCenterView();
}
@FXML
public void setCabinTwo() throws IOException {
cabinIndex=2;
setCenterView();
}
@FXML
public void setTabOne() throws IOException {
tabIndex=1;
setCenterView();
}
@FXML
public void setTabTwo() throws IOException {
tabIndex=2;
setCenterView();
}
public int getCabinIndex() {
return cabinIndex;
}
public int getTabIndex() {
return tabIndex;
}
private int tabIndex=0;
private int cabinIndex=1;
public Stage primaryStage;
private BorderPane mainPane;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage=primaryStage;
primaryStage.setTitle("Test");
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainViewController.class.getResource("MainView.fxml"));
mainPane = loader.load();
setCenterView();
Scene scene = new Scene(mainPane);
primaryStage.setScene(scene);
primaryStage.show();
}
public void setCenterView() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainViewController.class.getResource("TestView.fxml"));
AnchorPane testPane = loader.load();
TestViewController tvc = loader.<TestViewController>getController();
tvc.changeLabel(getCabinIndex());
tvc.changeIndex(getTabIndex());
mainPane.setCenter(testPane);
}
}
和我TestViewController如下所示:
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class TestViewController {
@FXML
private Label cabinIndex;
@FXML
private Label tabIndex;
public void initialise() {
this.changeLabel(0);
this.changeIndex(0);
}
public void changeLabel(int n) {
cabinIndex.setText("Cabin "+Integer.toString(n));
}
public void changeIndex(int n) {
tabIndex.setText("Tab "+Integer.toString(n));
}
}
我在做什麼錯?
請嘗試刪除所有混亂,並將其刪除一個較小的例子。此外,錯誤信息會非常有幫助。 – rethab 2014-10-16 14:08:20
你在說什麼混亂?一旦我再次訪問我的電腦,我會發布錯誤消息。 – 2014-10-16 14:45:26
歡迎來到StackOverflow。當您發佈示例時,請始終嘗試創建一個[最小完整示例](http://stackoverflow.com/help/mcve),該示例剛好足以重現此問題,而不再更多。在你的情況下,你可以完全消除'TestView.fxml'和'TestViewController',並且消除'MainViewController'中除'mainPane'和一個按鈕之外的所有內容。用'mainPane.setCenter(new Label(「Hello」))替換'setCenterPane'的實現,你仍然會看到相同的堆棧跟蹤。 (這是@rethab指的「混亂」。) – 2014-10-17 01:38:13