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

时间:2014-12-17 13:03:06

标签: java arrays swing mouseclick-event

我正在编写一个扫雷游戏。单击时,按钮应显示数字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);

当用户点击按钮时:

  // This method takes in an x and y value and defines what should happen when the user clicks there. 
public void click(int row, int col) {
    if(mineBoard[row][col] == Mine) {

        buttons[row][col].setIcon( new ImageIcon( "images/bomb.gif" ) );
        lose();
    } else {
        score += 1;
        updatescore();
        buttons[row][col].setText("" + numAdjMines(mineBoard, row, col));
        mineBoard[row][col] = UncoveredEmpty;
        buttons[row][col].setText(Character.toString(getUserChar(mineBoard[row][col])));
        if(numAdjMines(mineBoard, row, col) == Empty) {
            for(int dr = -1; dr <= 1; dr ++) {
                for(int dc = -1; dc <= 1; dc++) {
                    if(row+dr >= 1 && row+dr < 10 &&
                    col+dc >= 1 && col+dc < 10) {
                        if(mineBoard[row+dr][col+dc] == Empty) {
                            click(row+dr,col+dc);
                        }
                    }
                }
            }
        }
    }
}

MouseLister类:

 //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");
        }
    }

}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

当JButton只显示点时,意味着没有足够的空间来记下tekst。

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

然后你应该看到你的按钮有多大,然后是:

  1. 告诉GridLayout您的按钮应该有多大(通过调用setPrefferedSize()应该有效)
  2. 或者使用另一个不能解决此问题的布局管理器。
  3. P.S。出现你的炸弹图片,因为图片以不同的方式处理。它总是显示我相信。

    我希望这能为你解决。