我在JTabbedPane中有2個JPanel,當第一個面板(它的動畫)內的面板上調用更新(g)時,即使第二個面板是選定的面板(即可以看到的面板)更新的面板出現在屏幕上。爲什麼是這樣,我怎樣才能繞過這種行爲?JTabbedPane擺動更新錯誤
2
A
回答
5
update()
方法JComponent
「不清除背景」,因此您可能需要明確地執行此操作。 JTabbedPane
的典型examples通常不需要使用update()
。顯示您的使用情況的sscce可能會有所幫助。
附錄1:不清楚你爲什麼打電話update()
。下面是一個不顯示異常的簡單動畫。
附錄2:見Painting in AWT and Swing: paint() vs. update()。您可能想用repaint()
代替actionPerformed()
。
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;
public class JTabbedTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
//@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane jtp = new JTabbedPane();
jtp.setPreferredSize(new Dimension(320, 200));
jtp.addTab("Reds", new ColorPanel(Color.RED));
jtp.addTab("Greens", new ColorPanel(Color.GREEN));
jtp.addTab("Blues", new ColorPanel(Color.BLUE));
f.add(jtp, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
private static class ColorPanel extends JPanel implements ActionListener {
private final Random rnd = new Random();
private final Timer timer = new Timer(1000, this);
private Color color;
private int mask;
private JLabel label = new JLabel("Stackoverflow!");
public ColorPanel(Color color) {
super(true);
this.color = color;
this.mask = color.getRGB();
this.setBackground(color);
label.setForeground(color);
this.add(label);
timer.start();
}
//@Override
public void actionPerformed(ActionEvent e) {
color = new Color(rnd.nextInt() & mask);
this.setBackground(color);
}
}
}
2
時更新(克)稱爲面板 在第一面板內(它的一個 動畫)
重寫更新(...)方法是一種老式的AWT技巧,不應該與Swing一起使用。
請閱讀Swing教程Custom Painting的部分,以獲取正確的方法。對於動畫,請閱讀教程中的「如何使用Swing Timer」。
相關問題
- 1. 更新JTabbedPane組件
- 2. 擺動顯示錯誤與擺動
- 3. 添加JTabbedPane的一個JTabbedPane的錯誤
- 4. GridBagLayout出現擺動錯誤
- 5. 擺動方法錯誤
- 6. 動態更新擺動標記JXMapKit
- 7. 正確更新擺動組件?
- 8. 更新文本區域擺動的Java
- 9. 更改JTabbedPane的
- 10. 外觀在Swing中不會更新JTabbedPane
- 11. 如何解決錯誤?擺動按鈕重新繪製
- 12. 錯誤而擺動數據幀
- 13. Webkit擺動 - Sprite序列錯誤?
- 14. 擺脫unicode錯誤
- 15. 錯誤擺脫androi.jar
- 16. 擺脫SIGABRT錯誤
- 17. 擺脫錯誤C2243
- 18. 錯誤更新
- 19. 更新錯誤
- 20. JTabbedPane的困難(錯誤壓縮內容)
- 21. 無法刷新JTabbedPane
- 22. 刷新JTabbedPane組件
- 23. AIR 3.0 +包+自動更新+錯誤#16828
- 24. 自動更新訂閱錯誤
- 25. PHP動態更新函數錯誤?
- 26. JtabbedPane中的JtabbedPane
- 27. 錯誤更新列
- 28. SimpleSchema更新錯誤
- 29. 更新錯誤TextView
- 30. TeamCity:VCS更新錯誤
我沒有在JTabbedPane上調用更新,它在JTabbedPane中某個面板內的組件上調用,問題是組件總是被繪製到屏幕上,即使面板中駐留的是isn' t選定的面板。 – dominic 2010-02-27 22:25:25
將更新()添加到您的ActionPerformed()會造成我的問題。 – dominic 2010-02-28 01:50:30
查看上面添加的鏈接。 – trashgod 2010-02-28 03:09:49