java - 如何更改超类方法的参数?
问题描述
所以我试图改变 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,但这不允许我向该方法添加任何额外的参数。
解决方案
目前你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 运行时绘图不必显示不同的数组(例如,如果通过按下按钮创建了一个新数组并且您想要显示它),这个简单的示例就可以工作。
推荐阅读
- actions-on-google - 我们可以用超过 8000 个关于 dialogflow 和 amazon alexa 的问题来制作常见问题解答技能吗?
- javascript - 如何阻止调整大小栏如此故障?
- ios - XCode 构建系统:弄乱预处理器定义和包含的头文件?
- android - 错误:未知参数--licenses颤振医生--android-licenses
- javascript - 在javascript函数之后,图像边距没有推到浏览器页面的边缘
- javascript - 是否可以在同一个 Ejs 页面上显示集合(mongoDb)和所有集合中的每个元素?
- python - 为什么 GCC 编译的 Python 库在编译器版本之间兼容,而 MSVC 则不兼容?
- javascript - ReactJS Axios 和 Node.js - 数据未定义?
- python - 当 False 时循环不退出
- flutter - 颤振仅有效值为 0:1 如果我删除“值”: