所以我尝试更改 Canvas 类的绘制方法以接受数组作为参数之一。这是我尝试过的:
int[] array = createArray(10, 1, 10);
JFrame frame = new JFrame("My Drawing");
Canvas canvas = new Draw();
canvas.setSize(600, 600);
frame.add(canvas);
frame.pack();
frame.setVisible(true);
canvas.paint(canvas.getGraphics(), array);
这是 Draw 类:
public class Draw extends Canvas
{
/**Draws the graphs
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g, int[] array)
{
for(int x = 0; x<array.length; x++)
{
g.fillRect(x, 0, 10, array[x]);
}
}
}
我尝试将 Canvas 对象更改为 Draw canvas = new Draw() ,这并没有导致错误,但当我这样做时,它无法在 Canvas 上绘制任何内容。我也尝试过@Override,但这不允许我向该方法添加任何额外的参数。
最佳答案
当前,您的 new Draw()
被声明为 Canvas
对象。如果将声明更改为 Draw canvas = new Draw();
,则可以调用您的方法。
编辑:
问题是,当框架渲染组件时,paint(Graphics g)
是 Swing 调用的内部方法。您的 paint(Graphics g, int[] array)
方法不会更改渲染过程。您需要在调用 paint(Graphics g)
之前提供用于创建绘图的参数。这是一个非常简单的例子:
public class Draw extends Canvas {
private static final long serialVersionUID = 1L;
private int[] array;
public Draw(int[] array) {
this.array = array;
}
@Override
public void paint(Graphics g) {
for (int x = 0; x < array.length; x++) {
g.fillRect(x, 0, 10, array[x]);
}
}
}
然后您可以使用 Canvas draw = new Draw(array)
创建绘图。只要在 Gui 运行时绘图不必显示不同的数组(例如,如果通过按下按钮创建了一个新数组并且您想要显示它),这个简单的示例就可以工作。
关于java - 如何更改父类(super class)方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60513748/