0

私は、完全に理解していないと思われるいくつかのことを必死に実装しようとしています。コメントアウトされたアクションを実行できるように設定しようとしています(構文を変更する必要がありますが、最初に正しい軌道に乗っていることを確認したいです)。

私はこれを正しい方法で行っていますか?描画メソッドにない場合、描画アクションはどこに行くのですか? そこに移動すると、多くのエラーが発生します。ありがとう

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Graphics2D;
import java.awt.Graphics;

public class Test extends JPanel{

    abstract class graphic {
        public Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        private int[] location = new int[] {screenSize.width/2,screenSize.height/2}; 
    }

    public class gladiator extends graphic {
        void draw() {
        //g2d.setColor(Color.green);
        //g2d.fillArc(location[0], location[1], 100, 100, 45, 90);
        //g2d.setColor(Color.black);
        //g2d.fillArc((location[0]+50-10),(location[1]+50-10), 20, 20, 0, 360);
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        new Timer(200, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //              setLocation((location[0]+1),location[1]);
                repaint();
                System.out.println("repainting");
            }
        }).start();

    }

    public void setLocation(int x, int y){
        //this.location[0] = x;
        //this.location[1] = y;
    }


    public static void main(String[] args){
        JFrame jf=new JFrame();
        jf.setDefaultCloseOperation
        (JFrame.EXIT_ON_CLOSE);
        jf.setPreferredSize(Toolkit.getDefaultToolkit().getScreenSize());
        jf.add(new Test());

        jf.pack();
        jf.setVisible(true);

    }
}

私の元のコード:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Test extends JPanel{

    private int[] location = new int[2]; 

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.red);
        g.fillArc(location[0], location[1], 100, 100, 45, 90);
        g.setColor(Color.black);
        g.fillArc((location[0]+50-10),(location[1]+50-10), 20, 20, 0, 360);

        new Timer(2000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                setLocation((location[0]+50),50);
                repaint();
                System.out.println("repainting");
            }
        }).start();

    }

    public void setLocation(int x, int y){
        this.location[0] = x;
        this.location[1] = y;
    }


    public static void main(String[] args){
        JFrame jf=new JFrame();
        jf.setDefaultCloseOperation
        (JFrame.EXIT_ON_CLOSE);
        jf.setPreferredSize(new Dimension(300,500));
        jf.setLocation(100,100);
        jf.add(new Test());

        jf.pack();
        jf.setVisible(true);
    }
}

編集:このビットを含める必要がありました。最初のコメント投稿者は正しかったです。

エラーは、g2d または g のいずれかを参照して、シンボルが見つかりません。描画はペイント コンポーネント内でのみ可能であり、そこに描画するためのすべての指示を含める方法を見つけなければならないということです。これは抽象クラスとJavaでの2D描画の両方を使用した最初のブラシであるため、根本的に間違ったことをしていることを確認したい. また、location[0] などはそのままでは機能しないこともわかっています。それは無視しましょう。

一番下のコードは、(少なくとも最初は) 私が達成しようとしているものですが、一番上のコードに似たものを使用して、独立して動作できる複数のインスタンスを作成しようとしています。

4

1 に答える 1