java - 如何更改父类(super class)方法的参数?

标签 java

所以我尝试更改 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/

相关文章:

java - 在全屏独占模式下在 JtextField 中键入问题

java - HTTP 响应代码为 401 时读取数据

java - Android - getApplicationContext 出错

java - CharSequence.length() 是否始终与 String.length() 相同?

java - 编译问题——必须返回一个字符串

java - 如何在 Java/Gradle 中访问依赖项的依赖项?

java - spring @Transactional 不起作用?

java - 通过相对路径创建文件不适用于 IDE

java - 如何将 String 转换为 Long?

java - 按给定的 DateTimeFieldType 舍入 DateTime