我正在创建一个程序,顶部有一排按钮,侧面有一排按钮。顶部按钮控制视图,侧面按钮控制要在视图中引用的对象。
我的主/根视图是一个边框。
关键是,当我单击这些按钮中的任何一个时,更改我的 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));
}
}
我究竟做错了什么?