当按钮位于主要场景而不是堆栈窗格中时,我成功用.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);
}
}
答案 0 :(得分:0)
我的第一个建议是阅读一些不错的Java书籍或教程,并且有很多关于Java的很好的资源,还请确保学习约定。
您的问题是,您在chatController
和chat_room
中都创建了chat_list
的新实例,并且他们应该在另一个实例中共享同一实例以使其正常工作,您也可能不这样做甚至在pane_chat_list
内初始化pane_chat_room
和chatController
都会导致NullPointerException
。
即使解决方案要简单得多,您的方法也很难做到这一点,您需要做的是拥有1个父类,其中包含两个视图,视图彼此不了解,它们只是通知父母单击了{ {1}},由父级管理显示的内容和隐藏的内容。