我正在嘗試將分數(shù)和經(jīng)過時間標簽 (scoreAndTimer) 添加到我已經(jīng)運行的貪吃蛇游戲代碼中。問題是當我使用 scoreAndTimer.setText(); 它與以前的文本堆疊在一起。我試圖 setText(); 然后設(shè)置文本(字符串);清除前一個,但它也不起作用。 private JLabel scoreAndTimer; private int sec, min; private Game game; public Frame() { JFrame frame = new JFrame(); game = new Game(); frame.add(game); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Snake"); frame.setResizable(false); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); scoreAndTimer = new JLabel(); scoreAndTimer.setVerticalAlignment(SwingConstants.TOP); scoreAndTimer.setHorizontalAlignment(SwingConstants.CENTER); frame.add(scoreAndTimer); timer(); } private void timer(){ while(game.isRunning()){ scoreAndTimer.setText("SCORE: "+(game.getSnakeSize()-3)+" Elapsed Time: "+timeFormatter()); try{ if(sec == 60){ sec = 0; min++; } sec++; Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } if(!game.isRunning()) scoreAndTimer.setText("Game Over"); } private String timeFormatter(){ if(sec < 10 && min < 10) return "0"+min+":0"+sec; else if(sec >= 10 && min < 10) return "0"+min+":"+sec; else if(sec < 10 && min >= 10) return min+"0:"+sec; else return min+":"+sec; } public static void main(String[] args) { new Frame(); }}程序運行良好,但無法防止重疊。沒有錯誤。我在我的程序中總共使用了 3 個線程,我不確定線程是否對此產(chǎn)生了問題。代碼有點長,這就是為什么我現(xiàn)在不共享其余部分的原因,如果需要我也可以共享其他部分,但我認為問題不會出現(xiàn)在其他類上。
1 回答

鳳凰求蠱
TA貢獻1825條經(jīng)驗 獲得超4個贊
JFrame
,或者更準確地說,它默認contentpane
使用。?當您將組件添加到:BorderLayout
JFrame
frame.add(game);
您將其隱式添加到BorderLayout.CENTER
位置,這是默認位置。所以frame.add(game);
相當于frame.add(game, BorderLayout.CENTER);
位置BorderLayout.CENTER
(以及其他BorderLayout
位置)可以容納一個組件。問題是您BorderLayout.CENTER
通過以下方式將另一個組件添加到同一位置:
frame.add(scoreAndTimer);
解決方案是添加scoreAndTimer
到不同的位置:
?frame.add(scoreAndTimer,?BorderLayout.PAGE_END);
并且有
????frame.pack(); ????frame.setVisible(true);
最后,在添加所有組件之后。
重要的旁注:timer()
所寫的是行不通的。將 Swing 應(yīng)用程序視為在單個線程上運行的應(yīng)用程序。當這個線程忙于運行長 while 循環(huán)(就像你在里面的那個一樣timer()
,它不會更新 gui。gui 變得沒有響應(yīng)(凍結(jié))。
添加回答
舉報
0/150
提交
取消