Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有些JPanel没有显示在我的CardLayout面板中_Java_Eclipse_Layout - Fatal编程技术网

Java 有些JPanel没有显示在我的CardLayout面板中

Java 有些JPanel没有显示在我的CardLayout面板中,java,eclipse,layout,Java,Eclipse,Layout,我使用卡片布局来显示和隐藏我制作的每个面板。在最初的几天里,它在我制作的前5个面板中工作良好。奇怪的是,突然之间,我的第六块新面板似乎没有出现。任何地方都没有语法错误,我再次检查了所有代码,以查找任何打字错误、拼写错误、复制粘贴失败,但似乎无法找到任何异常。。。今天我试着继续制作第七个面板,但第七个面板也没有出现 public ViewController(int width, int height){ this.WIDTH = width; this.HEIGHT = heig

我使用卡片布局来显示和隐藏我制作的每个面板。在最初的几天里,它在我制作的前5个面板中工作良好。奇怪的是,突然之间,我的第六块新面板似乎没有出现。任何地方都没有语法错误,我再次检查了所有代码,以查找任何打字错误、拼写错误、复制粘贴失败,但似乎无法找到任何异常。。。今天我试着继续制作第七个面板,但第七个面板也没有出现

public ViewController(int width, int height){
    this.WIDTH = width;
    this.HEIGHT = height;
    bgColor = new Color(255,204,153);

    mainFrame = new JFrame ("Mei Centre");
    mainFrame.setPreferredSize(new Dimension(WIDTH,HEIGHT));
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    mainPanel = new JPanel();
    mainPanel.setLayout (new CardLayout(0,0));
    mainPanel.setBackground(bgColor);
    mainPanel.setVisible(true);
}

public void makePanels (){
    // make most panels
    mainPage = new MainPagePanel(this, WIDTH, HEIGHT, bgColor);
    adminLoginPage = new AdminLoginPage(this, WIDTH, HEIGHT, bgColor);
    playerLoginPage = new PlayerLoginPage(this, WIDTH, HEIGHT, bgColor);
    playerLoginPrompt = new PlayerLoginPrompt (controller, this, WIDTH, HEIGHT, bgColor);
    playerMainMenu = new PlayerMainMenu (controller, this, WIDTH, HEIGHT, bgColor);
    gameSettings = new GameSettingPanel (controller, this, WIDTH, HEIGHT, bgColor);
    dealerShuffle = new DealerShufflePanel (bgColor);

    // add panels to frame in chronological order
    mainPanel.add(mainPage, "MainPage"); // index 0
    mainPanel.add(adminLoginPage, "Admin"); // index 1
    mainPanel.add(playerLoginPage, "Player"); // index 2
    mainPanel.add(playerLoginPrompt, "LoginPlayer"); // index 3
    mainPanel.add(playerMainMenu, "PlayerMainMenu"); // index 4
    mainPanel.add(gameSettings, "GameSetting"); // index 5
    mainPanel.add(dealerShuffle, "DealerShuffle"); // index 6       

    mainFrame.add(mainPanel);

    mainFrame.pack();
    mainFrame.setVisible(true);
}

// make and add GamePlayPanel into mainPanel
public void makeGamePanel(Dealer dealer, GameTable table, ArrayList<GamePlayerInterface> gamePlayers) {
    System.out.println("Making gamePlayPanel");
    gamePlay = new GamePlayPanel (controller, this, WIDTH, HEIGHT, bgColor, dealer, table, gamePlayers);

    mainPanel.add(gamePlay, "GamePlay"); // index 7
    mainPanel.repaint();
}
这是我用来控制显示哪个面板的方法。它可以从索引0到索引5的面板中工作(上面屏幕截图中的列表)

当我单击上面任何面板中的某些jbutton时,我将为这个操作侦听器分配适当的面板名称,以便它可以调用该方法来显示适当的面板

private void startRound(GameTable table, ArrayList<GamePlayerInterface> gamePlayers, GamePlayer human) {

    // GAME START!  dealer shuffles cards
    dealer.shuffleCards();
    view.showPanel("DealerShuffle");

    /* insert some delayer here*/       
    /*does some game logic action*/

    // make game play GUI
    view.makeGamePanel(dealer, table, gamePlayers);
    view.showPanel("GamePlay");
这些是正常运行的结果。在下面几行中,它表明我的程序运行正常,它甚至试图显示DealerSuffle面板和游戏玩法,但屏幕上实际发生的是:正如调用Change panel方法显示DealerSuffle一样,前面的面板(GameSettings)实际上被禁用,但DealerSuffle没有出现,因此,屏幕停留在GameSetting面板的后像上,没有任何东西可供我点击或交互。不用说,后来我的游戏面板也没有出现

如果有人想查看我要运行的整个程序,这里是指向我的压缩文件的链接: 这些代码将非常混乱,因为我刚刚开始在一个程序上实现GUI,这个程序以前是在控制台上运行的


谢谢你的时间和帮助

Nvm,我可能还没有修复我的代码当前的结构问题,也没有首先了解导致问题的原因,但在重新构建代码并重新构建代码后,我成功地使其正常工作。这次我没有在viewController中创建JPanel并将它们添加到其中,而是在Controller中构建JPanel并将它们传递到viewController中以添加到JFrames中。总之,问题解决了。感谢所有帮助过我的人

您没有名为“GamePlay”的面板,但有一个名为“GameSetting”的面板。创建页面以及请求显示哪个页面时,不应使用字符串文字。您应该创建一个字符串变量,并在创建面板和请求显示页面时使用该变量-这样,如果您在某个地方拼写错误,您将永远不会遇到难以发现的错误。实际上,我从未为任何面板/页面设置任何尺寸(它们只是完全适合JFrame)。这些周长只是用来整齐地对齐面板上的组件。尽管如此,我还是尝试了你的建议,给了我的经销商一个维度,但仍然没有成功>@FredK,我确实有一个游戏,它是后来创建的,使用下面的方法。我已经检查了两次,三次,四次,但是我写的名字是正确的。不过,谢谢你的建议,我会改为使用字符串变量。在那些JPanel的构造函数中,你有setVisible(true)吗?@Orin2005最初没有,因为可见性无论如何都要由cardLayout设置,但即使我尝试在构造函数中将可见性更改为true,这没什么区别。
private class changePanel implements ActionListener{
    String page;

    public changePanel(String page){
        this.page = page;
    }

    public void actionPerformed(ActionEvent e){
        System.out.println(page + " is clicked");
        vController.showPanel(page);
    }
}
private void startRound(GameTable table, ArrayList<GamePlayerInterface> gamePlayers, GamePlayer human) {

    // GAME START!  dealer shuffles cards
    dealer.shuffleCards();
    view.showPanel("DealerShuffle");

    /* insert some delayer here*/       
    /*does some game logic action*/

    // make game play GUI
    view.makeGamePanel(dealer, table, gamePlayers);
    view.showPanel("GamePlay");