1

ポリゴンを描画する必要があります-連続するポイントを接続し、最後のポイントを最初のポイントに接続します。

この目標で、 drawPolygon(xPoints, yPoints, nPoints)を使用しようとしました。私の考えでは、この目的を達成するためのはるかに便利なアプローチです

しかし、Graphicsクラスは抽象クラスで、インスタンスオブジェクトを作成してdrawPolygon()メソッドを呼び出すことはできませんか?

コード:

public void draw() {
        Graphics g = null;
        int xPoints [] = new int[pointsList.size()];
        int yPoints [] = new int[pointsList.size()];
        int nPoints = pointsList.size();

        for (int i = 0; i < pointsList.size(); i++) {
            xPoints [i] = (int) pointsList.get(i).getX();
            yPoints [i] = (int) pointsList.get(i).getY();
        } 

        g.drawPolygon(xPoints, yPoints, nPoints);
    }
  • 何らかの方法でこのメソッドの呼び出しを回避できますか?
  • この目的を達成するための他の方法が存在する可能性がありますか?
4

3 に答える 3

2

開発者が Graphics を抽象化した理由は、グラフィックス オブジェクトをどこかから取得する必要があるためです。たとえば、JPanel または JFrame オブジェクトは、表示可能な領域を画面にレンダリングするため、関連付けられたグラフィックス オブジェクトを持ちます。通常、グラフィックス オブジェクトは getGraphics() メソッドで割り当てられます。簡単な例を次に示します。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

    public class Polygon extends JFrame {
        public static void main(String args[]){
            Test a = new Test();
            a.drawAPolygon();
        }


        public Polygon(){
            setSize(300,300);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        void drawAPolygon(int[] xPoints, int[] yPoints, int numPoints){
            Graphics g = getGraphics();
            g.drawPolygon(xPoints, yPoints, numPoints);
        }
        //@override
            public void paint(Graphics g){
            super.paint(g);
            //could also do painting in here.
        }
    }
于 2013-07-08T20:24:48.077 に答える
1

私は同じ問題を抱えていましたが、これは私がそれを回避した方法です:

//assuming you are displaying your polygon in a JFrame with a JPanel
public class SomeDrawingFrame extends JPanel{
    SomeDrawingFrame(){
    }

    @Override   //JFrame has this method that must be overwritten in order to 
                  display a rendered drawing.

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Polygon square = new Polygon();

        // these points will draw a square
        square.addPoint((0, 0));    //use this.getWidth() method if you want to 
                                         create based on screen size
        square.addPoint((0, 100));
        square.addPoint((100, 100));
        square.addPoint((100, 0)); 
        int y1Points[] = {0, 0, 100, 100};

        g.draw(polygon);
    }
}

これのインスタンスを作成し、最小の高さと幅がそれぞれ 100 の JFrame に追加するだけです。JFrame のサイズを返す JFrame の getWidth() メソッドを使用して、代わりにこれを使用してポイントを設定することができます (これはより優れています)。これは、画像がフレーム自体のサイズに対して相対的にレンダリングされるためです。

于 2013-07-08T20:25:14.313 に答える