我有兩個使用java swing的遊戲板的按鈕監聽器。Java Swing Button聽衆不工作
最初創建了一個俄羅斯方塊網格,然後在每個按鈕偵聽器中添加了功能。
我設置的板像這樣在我Play.java:
final TetrisGame g = new TetrisGame(11,1);
final BoardGraphics graphics = new BoardGraphics(TetrisBoard.BOARD_WIDTH, 40, g);
按鈕偵聽器,然後在同一Play.java創建:
graphics.btnStart.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Action arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
while (arc instanceof Store){
arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
}
graphics.tiles.redraw();
System.out.println();
System.out.println(g.toString());
System.out.println();
}
});
graphics.btnAuto.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
while (!g.gameEnded()){
Action arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
while (arc instanceof Store){
arc = p.getAction(g);
g.update(arc);
//graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
}
graphics.tiles.redraw();
System.out.println();
System.out.println(g.toString());
System.out.println();
/*try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
}
}
});
的btnStart完美的作品,按有一次,根據人工智能代理給出的下一步行動繪製了tetrisboard。
我希望btnAuto可以在沒有用戶按btnStart的情況下播放每一個動作直到結束。不過,我的btnAuto並沒有在網格上繪製任何東西,而是繪製了遊戲的最終狀態,即完成狀態。
任何人都可以看到爲什麼這可能不會重新繪製每個移動後,在while循環中生成網格嗎?
這工作完美..也解決了我在沒有把我的應用程序進入睡眠狀態時在while循環中使用計時器的問題。 –
@DizzyChamp:很高興幫助! –
我目前有一個擴展了JPanel的嵌套類。網格和getGraphics()的繪圖是在嵌套類中完成的。父類創建組件並將GUI的佈局設置爲一個整體。 –