第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重疊(堆疊)標簽有問題

重疊(堆疊)標簽有問題

holdtom 2023-04-13 14:47:26
我正在嘗試將分數(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é))。

查看完整回答
反對 回復(fù) 2023-04-13
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號