1 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
除了在 paintComponent 方法內(nèi),你不應(yīng)該在任何地方繪畫。所以解決方案是:
更新用于告訴 GUI 要繪制什么的模型字段。
如果此更新將以任何其他方式直接影響 GUI,例如更新文本字段、標(biāo)簽、JTables 等,則應(yīng)在 EDT 上執(zhí)行此數(shù)據(jù)更改,方法是將其放入傳入的 Runnable 中的事件隊(duì)列中
SwingUtilities.invokeLater(...)
然后打電話
repaint()
然后 GUI 將使用這些字段并在 Swing 事件線程上完成所有繪制。
請(qǐng)注意,這repaint()
是少數(shù)可以從 EDT 調(diào)用的 Swing 方法之一。
雖然哈哈,但我對(duì)更新模型字段的意思有點(diǎn)困惑,你能澄清一下嗎?
如果您正在創(chuàng)建任何復(fù)雜的 GUI,您可能會(huì)使用模型 - 視圖類型的結(jié)構(gòu)(例如模型 - 視圖 - 控制器的 MVC),其中將程序邏輯(模型部分)與 GUI(視圖)分開。視圖描述了模型的狀態(tài)并允許用戶交互,所以我說的是狀態(tài)字段。
例如,如果你有一個(gè)帶有動(dòng)畫的游戲,模型將代表玩家的位置、玩家的狀態(tài)(生命值、武器、庫存)、他們的行為……而視圖將繪制所有這些基于關(guān)于模型的狀態(tài)。
添加回答
舉報(bào)