首页 > 解决方案 > 如何更改超类方法的参数?

问题描述

所以我试图改变 Canvas 类的paint方法以接受一个数组作为参数之一。这是我尝试过的:

    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]);
    }
 }

}

我尝试将画布对象更改为 Draw canvas = new Draw() 并没有导致错误,但是当我这样做时它无法在画布上绘制任何东西。我也尝试了@Override,但这不允许我向该方法添加任何额外的参数。

标签: java

解决方案


目前你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 运行时绘图不必显示不同的数组(例如,如果通过按下按钮创建了一个新数组并且您想要显示它),这个简单的示例就可以工作。


推荐阅读