0

これが私のコードです。4 つのクラス、抽象クラス (GeoShape)、GeoShape を拡張する Rectangle クラス、GeoShape を含み、それらを描画しようとする GraphicsPanel、および Launcher クラスがあります。

GeoShape.java

public abstract class GeoShape
{
    protected Point p;
    protected int width, height;

    public GeoShape(Point p, int width, int height)
    {
        this.p = p;
        this.width = width;
        this.height = height;
    }

    public void drawItself(Graphics g)
    {
        g.setColor(Color.BLACK);
    }

    // Getters and setters...
}   

Rectangle.java

public class Rectangle extends GeoShape
{
    public Rectangle(Point p, int width, int height)
    {
        super(p, width, height);    
    }

    @Override
    public void drawItself(Graphics g)
    {
        super.drawItself(g);
        g.drawRect((int)p.getX(), (int)p.getY(), width, height);
    }
}

GraphicsPanel.java

public class GraphicsPanel extends JPanel
{
    private static final long serialVersionUID = 1L;
    private ArrayList<GeoShape> list;

    public GraphicsPanel() 
    {
        list = new ArrayList<GeoShape>();
    }

    @Override
    public void paintComponents(Graphics g) 
    {
        super.paintComponents(g);
        for(int i = 0 ; i < list.size() ; i++) list.get(i).drawItself(g);
    }

    public void addShapeInList(GeoShape s)
    {
        list.add(s);
    }
}

Launcher.java

public class Launcher extends JFrame
{
    private static final long serialVersionUID = 1L;
    private GraphicsPanel panel;

    public Launcher()
    {
        panel = new GraphicsPanel();
        panel.addShapeInList(new Rectangle(new Point(3,9),120,20));
        panel.repaint();

        this.setTitle("Test");
        this.setContentPane(panel);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(700, 500);
        this.setVisible(true);
    }

    public static void main(String[] args) 
    {
        new Launcher();
    }
}

そして、フレームには何も起こりません...助けてくれてありがとう。

4

1 に答える 1

2

paintComponentではなくに置き換えてみてくださいpaintComponents

public void paintComponent(Graphics g) 
{
    super.paintComponent(g);
    for(int i = 0 ; i < list.size() ; i++) list.get(i).drawItself(g);
}
于 2013-01-23T11:02:35.970 に答える