2012-03-19 15 views
0

私の質問は、私のアクションリスナーを使ってグラフィックスをクリアし、もう一度OtherPanelを実行して新しいグラフィックスセットを作成する方法です。ActionListenerでJPanelからグラフィックを消去

public class MainFrame extends JFrame 
    { 

    private OtherPanel panel; 

     public MainFrame() 
    { 

     panel = new OtherPanel(); 
     } 

    class OtherPanel extends JPanel 
    { 
     private OtherPanel() 
     { 
    ... 

     } 

     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 

      Graphics2D g2d = (Graphics2D) g;    
       .... 

      } 

     private class ReloadListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      } 
     } 

    } 
+0

これは本当に些細なようです。何を試しましたか?どのように失敗しましたか? – John3136

+0

私は今それを理解しました。しかし、なぜ私はupdateUI()を必要としているのか分かりません。 – chief

+4

これには 'updateUI()'を使わないでください。 'panel.repaint()'で十分です。そうでない場合は、問題を説明する[sscce](http://sscce.org/)を含めるように質問を編集してください。 – trashgod

答えて

-2
private class ReloadListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     newPic(); 
     panel.updateUI();    

    } 

    public MainFrame newPic() 
    { 

     return new MainFrame(); 
    } 
} 
+1

が間違っています:アプリケーションコードがupdateUIを呼び出さない - そのメソッドはプラグ可能なLAFメカニズムを排他的に使用するためのものです – kleopatra

4
class OtherPanel extends JPanel 
{ 
    private boolean isReset; 

    private OtherPanel() 
    { 
    ... 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if(!isReset){ 
      //your painting code here 
     } 
    } 

    public void setReset(boolean reset){ 
     isReset = reset; 
    } 

    private class ReloadListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      setReset(true); 
      repaint(); 
     } 

    } 
} 

すべてのパネルがどのように見える "リセット" する方法によって異なります。私はただデフォルトの外見としてsuper.paintComponent()を残しました、あなたはそれを変更したいかもしれません。パネルに何かを塗りたいときは、コードにsetReset(false)を追加することを忘れないでください。