流出:
パラメータの1つとして配列を受け入れるように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);
これはドロークラスです:
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]);
}
}
}
私はキャンバス=新しい描画を()、それはエラーにはなりませんでしたが、私がそれをした時にキャンバス上で何かを描くことができませんでした描画するキャンバスオブジェクトを変更してみました。私はまた、@Overrideを試みたが、それは私がメソッドに余分なパラメータを追加することはできません。
magicmn:
現在、あなたはnew Draw()
として宣言されCanvas
たオブジェクト。あなたが宣言を変更した場合にDraw canvas = new Draw();
、あなたのメソッドを呼び出すことができます。
編集:問題は、あるpaint(Graphics g)
コンポーネントがフレームワークによってレンダリングされるスイング、によって呼び出される内部メソッドです。あなたのpaint(Graphics g, int[] array)
方法は、レンダリングプロセスを変更しません。あなたは前の図面を作成するための偶然にを提供するためにwan't 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の実行中に別の配列を表示する必要はありませんように動作します。(exapleのために新しい配列は、ボタンを押すと作成された、あなたはそれを表示したい場合。)