###実現したいこと
Javaでマウスクリックのたびにマウス座標を中心として円を描くプログラムを作成しています。static変数を使って描かれる円が少しずつ大きくなっていくようにしたいのです(イメージとしては・→ o → O → 〇)、
###発生している問題・エラーメッセージ
ところが過去に描いた円も一緒に大きくなってしまいます。
どこを修正すればいいか分からなくなってしまいました。
###ソースコード
Java
Circle.java::
import java.awt.Color;
import java.awt.Graphics;
public class Circle
{
private int x;
private int y;
private static int radius = 0; public Circle(int x, int y) { this.x = x; this.y = y; radius++; } public void draw(Graphics g) { g.setColor(Color.red); g.drawOval(x - radius / 2, y - radius / 2, radius, radius); }
}
Sample4.java::
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Sample4 extends JFrame
{
private SamplePanel sp;
public static void main(String[] args) { Sample4 sm = new Sample4(); sm.setVisible(true); } public Sample4() { super("円を描画"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500, 500); sp = new SamplePanel(); add(sp, BorderLayout.CENTER); } public class SamplePanel extends JPanel { private ArrayList<Circle> circlelist = new ArrayList<Circle>(); public SamplePanel() { addMouseListener(new SampleMouseListener()); } public void paint(Graphics g) { super.paint(g);; Iterator<Circle> it = circlelist.iterator(); while(it.hasNext()) { Circle c = it.next(); c.draw(g);; } } public class SampleMouseListener extends MouseAdapter { public void mousePressed(MouseEvent e) { circlelist.add(new Circle(e.getX(), e.getY())); repaint(); } } }
}
###補足情報(言語/FW/ツール等のバージョンなど)
ご回答ありがとうございます。うまくいきました。
Circle.java::
import java.awt.Color;
import java.awt.Graphics;
public class Circle
{
private int x;
private int y;
private int radius;
public Circle(int x, int y, int radius) { this.x = x; this.y = y; this.radius = radius; } public void draw(Graphics g) { g.setColor(Color.red); g.drawOval(x - radius / 2, y - radius / 2, radius, radius); }
}
Sample4.java::
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Sample4 extends JFrame
{
private SamplePanel sp;
public static void main(String[] args) { Sample4 sm = new Sample4(); sm.setVisible(true); } public Sample4() { super("円を描画"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500, 500); sp = new SamplePanel(); add(sp, BorderLayout.CENTER); } public class SamplePanel extends JPanel { private int radius = 0; private ArrayList<Circle> circlelist = new ArrayList<Circle>(); public SamplePanel() { addMouseListener(new SampleMouseListener()); } public void paint(Graphics g) { super.paint(g);; Iterator<Circle> it = circlelist.iterator(); while(it.hasNext()) { Circle c = it.next(); c.draw(g); } } public class SampleMouseListener extends MouseAdapter { public void mousePressed(MouseEvent e) { circlelist.add(new Circle(e.getX(), e.getY(), radius++)); repaint(); } } }
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/18 13:57