2012-03-23 161 views
2

我必須使用插入排序對10個數字進行排序,並使用矩形(即條形圖)顯示它們。每次用戶點擊「下一個」時,它將排序數組中的下一個位置。控制檯確認我的算法正在工作,矩形將變得更大/更小,但只會覆蓋另一個矩形的頂部;在繪製新的矩形之前,面板不會擦除。我怎樣才能解決這個問題?這裏是我的代碼的重要部分:JPanel矩形覆蓋;將不會刪除

public class graphTest extends JFrame { 

    int[] numbers = {31, 19, 76, 24, 94, 99, 21, 74, 40, 73}; 
    private JButton action = new JButton("Next"); 

    public graphTest(){ 
     final ImagePanel p1 = new ImagePanel(); 
     add(action, BorderLayout.SOUTH); 
     p1.add(new ImagePanel(), BorderLayout.CENTER); 
     add(p1,BorderLayout.CENTER); 
     action.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       //Code for insertion sort 
       p1.repaint(); 
       //System.out.println testing array 
      } 
     }); 
    } 

    class ImagePanel extends JPanel{ 
     public void paintComponent (Graphics g){ 
      super.paintComponents(g); 
      g.setColor(Color.black); 
      for(int i = 0; i < 10; i++) 
       g.drawRect(10*i+10,200-numbers[i],7,numbers[i]); 
     } 
    } 

    public static void main(String[] args) { 
     JFrame frame = new graphTest(); 
     frame.setTitle("Hi"); 
     frame.setSize(300, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     } 

} 

我已經繪製矩形定期之前只是畫一個大fillRect做了一個快速的解決方法,但我還是想學習如何正確地重繪一個JPanel。

回答

3

ImagePanel.paintComponent(Graphics g)

你打電話super.paintComponents(g)當你真正想要的是super.paintComponent(g)

+0

謝謝!比我想象的要容易得多 – user1287523 2012-03-23 05:12:40

2

我改變super.paintComponentssuper.paintComponent(無「S」就結束),它似乎很好地工作。