2014-04-25 64 views
-1

我正在做一個java家庭作業任務。該任務是獲取50個隨機整數的數組,並繪製矩形或線條,其高度是每個成員的大小。當單擊JPanel時,選擇排序將對數組進行排序並重新繪製矩形,這次按從小到大的順序排列。我有繪製所有矩形的drawPass方法。該任務需要我從我的paintComponent方法中調用drawPass方法。我的問題是我不能在paintComponent中調用drawPass,因爲drawPass需要有一個圖形對象,但paintComponent沒有任何參數。 Netbeans強調drawPass();在我的paintComponent方法中,它說「必需:圖形,找到:沒有參數」。任何有關如何從paintComponent或任何建議調用drawPass的幫助將不勝感激。從paintComponent調用繪製方法

package hw10; 

import static java.awt.Color.RED; 
import java.awt.Graphics; 
import java.util.Random; 

/** 
* 
* @author tshade 
*/ 
public class AnimatedSelectionSortPanel extends javax.swing.JPanel { 

    int[] numbers = new int[50]; 

    /** 
    * Creates new form AnimatedSelectionSortPanel 
    */ 
    public AnimatedSelectionSortPanel() { 
     initComponents(); 
    } 

    private void loadArray() { 
     for (int i = 0; i < 50; i++) { 
      Random rnd = new Random(200 - 20); 
      int r = rnd.nextInt(); 
      numbers[i] = r; 
     } 
    } 

    private void selection() { 
     for (int top = 0; top <= numbers.length - 2; top++) { 
      swapElements(top, findMinIndex(top)); 
     } 
    } 

    private int findMinIndex(int startAt) { 
     int minIndex = startAt; 
     for (int index = startAt + 1; index <= numbers.length - 1; index++) { 
      if (numbers[index] < numbers[minIndex]) { 
       minIndex = index; 
      } 
     } 
     return minIndex; 
    } 

    private void swapElements(int index1, int index2) { 
     int tmp = numbers[index1]; 
     numbers[index1] = numbers[index2]; 
     numbers[index2] = tmp; 
    } 

    private void drawPass(Graphics g) { 
     super.paintComponent(g); 
     int x = 10; 
     for (int i = 0; i < 50; i++) { 
      int height = numbers[i]; 
      g.setColor(RED); 
      g.drawRect(x, 250 - height, 1, height); 
      x = x + 10; 
     } 
    } 

    protected void paintComponent() { 
     if (numbers == null) { 
      loadArray(); 
      drawPass(); 

     } 

    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       formMouseClicked(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 613, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 235, Short.MAX_VALUE) 
     ); 
    }// </editor-fold>       

    private void formMouseClicked(java.awt.event.MouseEvent evt) {         
     paintComponent(); 
     selection(); 
     repaint(); 
    }         

    // Variables declaration - do not modify      
    // End of variables declaration     
} 

回答

3

我的問題是,我不能把我的drawPass中的paintComponent監守drawPass需要有一個圖形對象,但的paintComponent沒有任何參數。

確定它收到Graphics對象。您沒有在類中正確覆蓋paintComponent(...)方法。

閱讀Swing教程Custom Painting中的部分以獲取更多信息和working示例。或者您可以使用「paintComponent」搜索論壇。你會發現成千上萬的自定義繪畫的例子。另外,您應該試圖直接調用paintComponent(...)方法never。如果你寫@override在你的paintComponent方法

+0

[文檔的paintComponent鏈接](http://docs.oracle.com/javase/ 7/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)) – DoubleDouble

+0

謝謝!我現在正在閱讀。這看起來像修復了錯誤。 – user3573272

0

,你會找出的paintComponent具有圖形參數

;)

+0

謝謝!我想我已經修好了。 – user3573272

相關問題