簡體   English   中英

如何在新繪制之前清除 Graphics/JPanel

[英]How to clear Graphics/JPanel before new draw

有很多類似的問題,但我沒有在其中找到解決方案,所以這是我的問題:

在我的 JPanel 中,我有一個視覺證明,我更新它以開發我的證明,這里一切都很好。 但是我有一個按鈕可以讓我重新開始我的證明。 我沒有讓我的 JPanel 與我的證明的第一行有效,而是我的第一行有效,但我也交替看到我的舊證明(它在閃爍)。 我不明白為什么。

我的 JPanel 包含幾個組件,不僅是我的 JPanel,所以我認為使用removeAll()不是一個好主意。 如您所見,我嘗試了revalidate()repaint()方法,但它不起作用。

我想從在此處輸入圖像描述 在此處輸入圖像描述 但實際上我兩者都看到了。 為什么?

這是我的代碼的一些摘錄:

這是我按下“debut”按鈕時的動作。 只有結尾對你有用,我使用 revalidate 和 repaint 方法但沒有任何效果。 Pann 是我的 class,它擴展了 JPanel。

//Come back to the first step of the proof
debut.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
        //I delete my old proof on my objects

        pann.revalidate();
        pann.repaint();
    }         
}); 

這是我的 JPanel 的繪制方法。 我向您展示它是因為我使用了超級構造函數,並且我認為它很重要。

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setFont(new Font("serif", Font.PLAIN, 20)); 

    if (arbre != null) 
        dessiner(arbre, g, new Dimension(0,0), 0, 'c', 0, 0);
}

Dessiner 是我的證明方法,我認為沒有必要給你看這個 function。

也許你可以告訴我為什么它不起作用? 為什么我同時看到兩個證據? 也許你知道我必須做什么? 感謝您的幫助,如果您需要更多代碼或其他代碼,請告訴我。

最后我使用getContentPane().removeAll(); 然后我添加了所有組件:

getContentPane().removeAll();
//Modifications on pann
getContentPane().add(pann);
getContentPane().add(regles);
getContentPane().add(boutons);
getContentPane().add(pformule);
getContentPane().add(sequent);

我對任何其他解決方案持開放態度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM