Java 从paintComponent调用draw方法

Java 从paintComponent调用draw方法,java,swing,paintcomponent,Java,Swing,Paintcomponent,我正在做java作业。赋值是取一个由50个随机整数组成的数组,并绘制高度等于每个成员大小的矩形或直线。当点击JPanel时,选择排序将对数组进行排序并重新绘制矩形,这次是按从最小到最大的顺序。我有我的drawPass方法,即绘制所有矩形。该赋值要求我从paintComponent方法调用drawPass方法。我的问题是我不能在paintComponent中调用我的drawPass,因为drawPass需要一个图形对象,但paintComponent没有任何参数。Netbeans在drawPass

我正在做java作业。赋值是取一个由50个随机整数组成的数组,并绘制高度等于每个成员大小的矩形或直线。当点击JPanel时,选择排序将对数组进行排序并重新绘制矩形,这次是按从最小到最大的顺序。我有我的drawPass方法,即绘制所有矩形。该赋值要求我从paintComponent方法调用drawPass方法。我的问题是我不能在paintComponent中调用我的drawPass,因为drawPass需要一个图形对象,但paintComponent没有任何参数。Netbeans在drawPass中加了下划线;在我的paintComponent方法中,它说required:Graphics,find:no参数。如果您能从paintComponent获得有关如何调用drawPass的任何帮助或任何建议,我们将不胜感激

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中调用我的drawPass,因为drawPass需要一个图形对象,但paintComponent没有任何参数

确实如此,它将接收图形对象。您没有覆盖paintComponent。。。在你的课堂上正确使用方法

有关更多信息和工作示例,请阅读上Swing教程的部分。也可以使用paintComponent搜索论坛。你会发现成千上万的定制绘画的例子


此外,您不应该尝试调用paintComponent。。。方法。如果在paintComponent方法上写入@override,您将发现paintComponent具有图形参数


)

谢谢!我现在正在通读。看起来它修复了错误。谢谢!我想我已经修好了。