这个问题在这里已有答案:
当按钮位于主场景中而不是堆栈窗格中时,我成功地使用 .setVisible()
更改堆栈窗格中的窗格 .
但是当我想通过单击其中一个窗格中的按钮来更改我的窗格时,我将得到NullPointer错误......
我尝试在每个窗格控制器中创建StackPane控制器,并使用方法 .isPressed()
来控制窗格可见,那么我该如何解决这个问题呢?
chatController.java
public class chatController{
@FXML Pane pane_chat_list,pane_chat_room;
public void initialize() {
pane_chat_list.setVisible(false);
pane_chat_room.setVisible(true);
}
public void isPressed(int a) {
if(a == 0) {
pane_chat_list.setVisible(true);
pane_chat_room.setVisible(false);
}else {
pane_chat_list.setVisible(false);
pane_chat_room.setVisible(true);
}
}
}
chat_list.java
public class chat_list{
@FXML Button chat_list_button;
chatController controll = new chatController();
public void initialize() {
chat_list_button.setOnAction(e -> back());
}
public void back() {
controll.isPressed(1);
}
}
chat_room.java
public class chat_room{
@FXML Button chat_room_back;
chatController controll = new chatController();
public void initialize() {
chat_room_back.setOnAction(e -> back());
}
public void back() {
controll.isPressed(0);
}
}
1 回答
我的第一个建议是阅读一些优秀的Java书籍或教程,并且有很多很好的Java资源,同时也要确保学习约定 .
你的问题是你在
chat_room
和chat_list
中都创建了chatController
的新实例,并且它们应该在其他实例中共享相同的实例以使其工作,你甚至可能甚至不会在chatController
内初始化pane_chat_list
和pane_chat_room
,这会导致NullPointerException
.你的方法使得这很难,即使解决方案更简单,所有你需要的是拥有一个包含两个视图的父类,视图彼此不知道,它们只是通知父类点击
backButton
,和父管理显示的内容和隐藏的内容 .