我正在编写一个扫雷游戏。单击时,按钮应显示数字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");
}
}
}
答案 0 :(得分:1)
您可以尝试在按钮的默认文本中添加一些空格,如下所示:
buttons[a][b] = new JButton(" ");
或者,您可以在按钮上设置文本后尝试打包窗口。
答案 1 :(得分:0)
当JButton只显示点时,意味着没有足够的空间来记下tekst。
因此,解决方案是告诉Gridlayout
使按钮变大。
我建议您使用非常大的窗口测试游戏,然后尝试找到窗口足够大的点,Gridlayout
en JButton
同意可以放置tekst。
然后你应该看到你的按钮有多大,然后是:
GridLayout
您的按钮应该有多大(通过调用setPrefferedSize()
应该有效)P.S。出现你的炸弹图片,因为图片以不同的方式处理。它总是显示我相信。
我希望这能为你解决。