Javafx使用堆栈窗格更改窗格

时间:2018-07-25 09:07:49

标签: javafx pane

当按钮位于主要场景而不是堆栈窗格中时,我成功用.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 个答案:

答案 0 :(得分:0)

我的第一个建议是阅读一些不错的Java书籍或教程,并且有很多关于Java的很好的资源,还请确保学习约定。

您的问题是,您在chatControllerchat_room中都创建了chat_list的新实例,并且他们应该在另一个实例中共享同一实例以使其正常工作,您也可能不这样做甚至在pane_chat_list内初始化pane_chat_roomchatController都会导致NullPointerException

即使解决方案要简单得多,您的方法也很难做到这一点,您需要做的是拥有1个父类,其中包含两个视图,视图彼此不了解,它们只是通知父母单击了{ {1}},由父级管理显示的内容和隐藏的内容。