Java 从paintComponent调用draw方法
我正在做java作业。赋值是取一个由50个随机整数组成的数组,并绘制高度等于每个成员大小的矩形或直线。当点击JPanel时,选择排序将对数组进行排序并重新绘制矩形,这次是按从最小到最大的顺序。我有我的drawPass方法,即绘制所有矩形。该赋值要求我从paintComponent方法调用drawPass方法。我的问题是我不能在paintComponent中调用我的drawPass,因为drawPass需要一个图形对象,但paintComponent没有任何参数。Netbeans在drawPass中加了下划线;在我的paintComponent方法中,它说required:Graphics,find:no参数。如果您能从paintComponent获得有关如何调用drawPass的任何帮助或任何建议,我们将不胜感激Java 从paintComponent调用draw方法,java,swing,paintcomponent,Java,Swing,Paintcomponent,我正在做java作业。赋值是取一个由50个随机整数组成的数组,并绘制高度等于每个成员大小的矩形或直线。当点击JPanel时,选择排序将对数组进行排序并重新绘制矩形,这次是按从最小到最大的顺序。我有我的drawPass方法,即绘制所有矩形。该赋值要求我从paintComponent方法调用drawPass方法。我的问题是我不能在paintComponent中调用我的drawPass,因为drawPass需要一个图形对象,但paintComponent没有任何参数。Netbeans在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具有图形参数
) 谢谢!我现在正在通读。看起来它修复了错误。谢谢!我想我已经修好了。