我在使用paintComponent()和repaint()時遇到了一個奇怪的問題。 正如你在下面看到的,我有一個paintComponent()
類作爲內部類作爲我的GUI的主要JPanel。paintComponent()被調用了200次
// add another panel to centerInner
tableBottom = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!paintImages.isEmpty()) {
for (PaintImages temp : paintImages) {
g.drawImage(temp.getImage(), temp.getX(), temp.getY(), this);
}
}
if (!extraCards.isEmpty()) {
for (PaintImages temp1 : extraCards) {
g.drawImage(temp1.getImage(), temp1.getX(), temp1.getY(), this);
}
}
}
};
這是一個黑色傑克遊戲,有4個玩家的經銷商。
初始拉伸的構造:
repaint()
由4個功能調用。 一種更新方法,用於創建要爲最初交易打印的對象ArrayList
。 另一種更新方法,爲繪製的每張卡創建一個ArrayList
。 並重置清除所有ArrayLists
並重新繪製新的初始交易。
我不會進入後端,但這四種方法中的每一種都只能運行所需的次數。只是每次召喚一次。
我的問題是,當paintComponent
由repaint()
調用,paintComponent()
運行近200倍,不包括亂跑,平均每場比賽一張10倍for
循環。
我的問題是:
1)是一個paintComponent
方法這個共同的行爲? PaintComponent是否會一遍又一遍地重複自己,直到所有繪畫都已完成?
OR
2),這都與Jpanel tableBottom
辦?在這一點上,沒有什麼實際上被添加到JPanel,因爲它是最頂級的JPanel。但也許是paintComponent
反覆跑了每一個的JPanel,JFrame的,contentPane中,標籤等,
OR
3)難道我做錯了什麼在我下面的代碼?再次通過使用增量和打印語句進行測試,我發現更新方法被調用適當的時間並正確地執行它們的工作。
感謝您的任何幫助。
你的代碼看起來不錯;問題可能在其他地方。 AFAIK paintComponent每個組件被調用一次,所以它不是增量式的。也許可以使用IDE中的調試器來查看調用堆棧?可能有一個組件行爲異常,從paint方法中觸發重繪事件。 – Kenney
每當tableBottom被調整大小或每當它獲得一次曝光(如果沒有backings存儲)或每當它的父級重置其位置時,都會調用paintComponent()。多久刷新一次被調用? (只要覆蓋它,並讓它調用super.repaint())? – FredK
@FredK在最初的抽獎中它被調用一次,之後每張抽獎一次。我刪除了我以前的其他2個。 'super.repaint()'會做什麼,我會把它放在哪裏?因爲'paintComponent'是一個內部類,所以我調用了像'tableBottom.paintComponent() –