英文:
How to change parameters for super class method?
问题
以下是翻译好的内容:
因此,我尝试将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 {
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()
,虽然没有出现错误,但在这样做时无法在画布上绘制任何内容。我还尝试使用@Override
,但这不允许我向该方法添加任何额外的参数。
英文:
So I'm trying to change the paint method from the Canvas class to accept an array as one of the parameters. This is what I tried:
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);
and this is the Draw class:
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]);
}
}
}
I tried changing the canvas object to Draw canvas = new Draw() and that didn't result in an error but it wasn't able to draw anything on the canvas when I did that. I also tried @Override but that doesn't allow me to add any extra parameters to the method.
答案1
得分: 2
<s>目前你的``new Draw()``被声明为一个``Canvas``对象。如果你将声明更改为``Draw canvas = new Draw();``,你就可以调用你的方法。</s>
编辑:
问题在于,``paint(Graphics g)``是由Swing在组件将由框架渲染时调用的内部方法。你的``paint(Graphics g, int[] array)``方法并不改变渲染过程。你希望在调用``paint(Graphics g)``之前提供用于创建绘图的参数。以下是一个非常简单的示例:
```java
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运行时绘图不需要显示不同的数组的情况(例如,如果通过按钮按下创建了一个新数组,并且你想要显示它)。
<details>
<summary>英文:</summary>
<s>Currently your ``new Draw()`` is declared as a ``Canvas`` object. If you change the declaration to ``Draw canvas = new Draw();`` you can call your method.</s>
Edit:
The problem is, that ``paint(Graphics g)`` is an internal method called by Swing, when the component will be rendered by the framework. Your ``paint(Graphics g, int[] array)`` method doesn't change the render process. You want to provide the parameters for creating the Drawing before ``paint(Graphics g)`` is called. Here is an very simple example:
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]);
}
}
}
And then you create your drawing with ``Canvas draw = new Draw(array)`` instead. This simple example works as long as the Drawing doesn't have to display a different array while the Gui is running (for example if a new array was created with a button press and you want to display it).
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论