Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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 游戏中的按钮未显示正确的消息_Java_Arrays_Swing_Mouseclick Event - Fatal编程技术网

Java 游戏中的按钮未显示正确的消息

Java 游戏中的按钮未显示正确的消息,java,arrays,swing,mouseclick-event,Java,Arrays,Swing,Mouseclick Event,我正在编写一个扫雷游戏。单击按钮时,按钮应显示数字0、1或2,以显示相邻矿井的数量。我最近把布局改成了gridlayout,从那以后,我点击一个按钮就得到了“…”除了发现了一个地雷,它把按钮改成了炸弹gif 有人能告诉我如何在点击后恢复这些数字吗 以下是创建按钮数组的代码: JPanel gridPanel = new JPanel(new GridLayout(boardsize, boardsize)); buttons = new JButton[boardsize][bo

我正在编写一个扫雷游戏。单击按钮时,按钮应显示数字0、1或2,以显示相邻矿井的数量。我最近把布局改成了gridlayout,从那以后,我点击一个按钮就得到了“…”除了发现了一个地雷,它把按钮改成了炸弹gif

有人能告诉我如何在点击后恢复这些数字吗

以下是创建按钮数组的代码:

    JPanel gridPanel = new JPanel(new GridLayout(boardsize, boardsize));
    buttons = new JButton[boardsize][boardsize];
    mineBoard = new int[9][9];
    for (int a = 0; a < boardsize; a++) 
        for (int b = 0; b < boardsize; b++) {
            buttons[a][b] = new JButton("");
            gridPanel.add(buttons[a][b]);
            buttons[a][b].addMouseListener(new MouseListener(a,b));
            setx(a);
            sety(b);
            settried(false);
            setmine(false);
    }   
    contentPane.add(gridPanel, BorderLayout.CENTER);

您可以尝试在按钮的默认文本中添加一些空格,如下所示:

buttons[a][b] = new JButton("    ");

或者,在设置按钮上的文本后,您可以尝试打包窗口。

当按钮只显示点时,表示没有足够的空间来记录tekst

因此,解决方案是告诉
Gridlayout
使按钮变大。 我建议你用一个非常大的窗口来测试你的游戏,然后试着找到你的窗口足够大的地方,
Gridlayout
en
JButton
同意可以放置tekst

然后,您应该看到在该点上的按钮有多大,然后:

  • 告诉
    GridLayout
    您的按钮应该有多大(通过调用
    setPreferedSize()
    这应该可以工作)
  • 或者使用另一个不会出现此问题的布局管理器
  • 顺便说一句,你的炸弹图片出现是因为图片的处理方式不同。我相信它们总是被展示出来


    我希望这能为您解决问题。

    您是否尝试过在
    单击
    方法的
    else
    中设置断点,以查看是否达到了此目的?我还没有尝试过此方法,但是,所有的游戏功能仍然有效,因此似乎可以区分数字,但不会返回它们。谢谢,这不是一个尺寸问题,因为在使它们变大的同时会消除。。。当我点击一个按钮时,它会显示“-”,而不是1或2。嗯,好吧,这很奇怪,尤其是当你说它以前工作得很好的时候。这是否适用于其他布局管理器?如果是这样的话,也许可以切换到其中一个。否则我就不知道了抱歉:(我只是让它与GridLayout一起工作很遗憾,它在borderlayout中的JPanel中也能工作,但是数组没有按它应该显示的那样显示,所以我避免了它。你可以编写自己的LayoutManager,这并不像看起来那么困难。特别是,你只需要创建一个网格。
     //ACTION WHEN USER CLICKS ON A BUTTON
    private class MouseListener extends MouseAdapter {
        private int x = 0;
        private int y = 0;
    
        public MouseListener(int row, int col) {
            this.x = row;
            int i = 0;
            this.y = col;
        }
    
        public void mouseClicked(MouseEvent e) {
            if(e.getButton() == MouseEvent.BUTTON1) {
                if((mineBoard[x][y] == Empty) && (Game.this.gamegoing == true)) {
                    Game.this.click(x, y);
                } else if(mineBoard[x][y] == Mine) {
                    buttons[x][y].setIcon( new ImageIcon( "images/bomb.gif" ) );
                    Game.this.lose();
    
                }} else if(e.getButton() == MouseEvent.BUTTON3) {
                Game.this.buttons[x][y].setText("F");
            }
        }
    
    }
    
    buttons[a][b] = new JButton("    ");