Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

レポートで苦しんでます(汗

スミマセンレポートで苦しんでます(汗
出来る方教えていただけると助かります(汗
点を描画するプログラムなんですが
点を100個描画したら100以上にならないように
クリックして点を新しく描画するたびに
古い点から順番に消えるようにしたいんです
どうやってもランダムに消えてしまって困ってます(汗

import java.util.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("unchecked")
class Paint2 extends Frame implements MouseListener,MouseMotionListener {
    int x, y;
    int count = 1;
    Vector objList;
    Figure obj;
    public static void main(String args[]){
        Paint2 f = new Paint2();
        f.setSize(640,480);
        f.setTitle("Paint Sample");
        f.addWindowListener(new WindowAdapter(){
            @Override public void windowClosing(WindowEvent e){
            System.exit(0);
        }});
        f.setVisible(true);
    }
    Paint2(){
        objList = new Vector();
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    @Override public void paint(Graphics g){
        Figure f;
        for(int i = 0; i < objList.size(); i++){
            f = (Figure)objList.elementAt(i);
            f.paint(g);
        }
        if(obj != null) obj.paint(g);
    }
    public void mousePressed(MouseEvent e){
        x = e.getX();
        y = e.getY();
        obj = new Point();
        System.out.println(count);
        if(count > 100){
            objList.remove(count-100);
            }
        count++;
        obj.moveto(x,y);
        objList.add(0,obj);
        repaint();
    }
    public void mouseReleased(MouseEvent e){
        x = e.getX();
        y = e.getY();
        obj = new Point();        
        obj.moveto(x,y);
        objList.add(0,obj);
        repaint();
    }
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseDragged(MouseEvent e){
        x = e.getX();
        y = e.getY();
        obj = new Point();
        obj.moveto(x,y);
        objList.add(0,obj);
        repaint();
        
    }
    public void mouseMoved(MouseEvent e){}
}
class Coord {
    int x, y;
    Coord(){
        x = y = 0;
    }
    public void move(int dx, int dy){
        x += dx;
        y += dy;
    }
    public void moveto(int x, int y){
        this.x = x;
        this.y = y;
    }
}
class Figure extends Coord {
    int color;
    Figure (){
        color = 0;
    }
    public void paint(Graphics g){}
}
class Point extends Figure {
    int size;
    Point(){
        size = 10;
    }
    @Override public void paint(Graphics g){
        g.fillOval(x - size/2, y - size/2, size, size);
    }
}

お願いします

6

回答

83892

閲覧

6件の回答

評価

0

まずはガイドラインな。

評価

0

スミマセンガイドライン確認してきました
一応そのまま問題を添付しているわけではないのですが
スミマセンでした
古い点から消える方法を
教えていただくことは出来ないでしょうか・・・

評価

0

Vectorの代わりにLinkedList<Figure>を使って100超えたらremoveFirstで
一番古いのを消していくとか、配列Figure[]にして
int nextIndex = 0;
という次にFigureオブジェクトを格納するインデックスを保持するフィールドを用意して、100超えたら0にリセットするとか

評価

0

Vectorにadd(Figure)するにもadd(0,Figure)するにも一番古いFigureの要素番号は固定です。
行列なんかを考えてみるといいと思います。

それから、コードを見てもランダムに消されるようには見えません。
質問者さんが書いたコードの仕組みを理解するために一度たとえばほぼ一直線になるように100回以上クリックしてみるといいと思います。

評価

0

多くの回答ありがとうございました
無事問題を解決できました

評価

0

解決したようでよかったですが、少なくともここはマルチポストしてる場合報告をした方がよかったのではないでしょうか?

ガイドラインから引用
・  他の掲示板にもマルチポストした場合は、マルチポストしたこと、問題が解決した場合は解決したことを報告しましょう 

質問文が同じなので、以下のサイトと同じ人ですよね?

javaで点を描画し描画した点が100個を越えたとき100個以上前の点から順に消したい - QA@IT
http://qa.atmarkit.co.jp/q/3735

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。