我有一个ViewController类和一个TabController类。TabController包含在ViewController中。
在ViewController中我动态制作Tabs(在TabControll我控制单个标签中的内容),我想在某个时候更改Tab的名称。我总是得到空指针......
ViewController类
@FXML
public TabPane tabPane;
@FXML
private Button createTabButton;
SingleSelectionModel<Tab> selectionModel;
private Integer count = 1;
@Override
public void initialize(URL location, ResourceBundle resources)
{
selectionModel = tabPane.getSelectionModel();
}
@FXML
public void createNewTab(){
Tab newTab = new Tab();
try {
String id = count.toString();
newTab.setText("New Tab");
newTab.setClosable(true);
newTab.setId(id);
newTab.setContent(FXMLLoader.load(getClass().getResource("Tab2.fxml")));
count++;
} catch (IOException e){
System.out.println("error");
}
tabPane.getTabs().add(newTab);
selectionModel.selectLast();
}
public void setTabText(String text){
selectionModel.getSelectedItem().setText(text);
}
}
TabController
@FXML
private ViewController viewController;
@FXML
private void createNewFlight(){
viewController.setTabText("text");
我想要为Tab设置的文本信息是在TabController类中生成的。
错误(我只插入2行)
引起:java.lang.reflect.InvocationTargetException引起:java.lang.NullPointerException
NullPointer显示此行“viewController.setTabText(”haha“);”
感谢所有帮助我的人
发布于 2019-06-06 10:43:45
我认为在viewController上设置@FXML无助于在TabController中创建一个ViewController实例。您需要为viewController提供一个setter并在加载fxml时设置它。就像是 ...
FXMLLoader myLoader = new FXMLLoader(ViewController.class.getResource("Tab2.fxml"));
Node node = myLoader.load(); // Not sure what node the fxml is with
((TabController) myLoader.getController()).setViewController(this); // Define a setter
https://stackoverflow.com/questions/-100006940
复制相似问题