Java 游戏中的按钮未显示正确的消息
我正在编写一个扫雷游戏。单击按钮时,按钮应显示数字0、1或2,以显示相邻矿井的数量。我最近把布局改成了gridlayout,从那以后,我点击一个按钮就得到了“…”除了发现了一个地雷,它把按钮改成了炸弹gif 有人能告诉我如何在点击后恢复这些数字吗 以下是创建按钮数组的代码: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
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
enJButton
同意可以放置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(" ");