我正在做一個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
}
[文檔的paintComponent鏈接](http://docs.oracle.com/javase/ 7/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)) – DoubleDouble
謝謝!我現在正在閱讀。這看起來像修復了錯誤。 – user3573272