Java - making-Dreieck-Klasse

Ich brauche, um eine Klasse mit dem Namen "TriangleShape" die impliments java.das awt.Form.
Nun zu einer anderen Klasse "TriangleComponent" sollte ein Objekt der TriangleShape Klasse und es soll ein Dreieck zeichnen, mit der gegebenen Länge der Seiten.

Habe ich es geschafft, um es zu schaffen, aber ich habe gelesen, dass das Dreieck gezeichnet werden sollen, in der folgenden Weise:

TriangleShape t = new TriangleShape(30,40,50);
g2.draw(t);         //This is the Graphics2D object that I use in paintComponent

Folgenden ist der code, den ich erstellt habe, aber es nutzt Line2D erstellen ein Dreieck.
Es ist die TriangleShape Klasse, davon ausgehen, dass ich implimented alle Methoden der Form-Klasse.

public class TriangleShape implements java.awt.Shape{

private double a, b, c;
private int x,y;
private Point2D loc;

public TriangleShape() {
    this.a=0;
    this.b=0;
    this.c=0;
}

public TriangleShape(double a, double b, double c) {
    //if supplied dimensions form a valid Triangle
    if ( this.isValid(a,b,c) ) {
        this.a = a;
        this.b = b;
        this.c = c;        
    }
    //Otherwise make it zero sized triangle
    else{
        this.a=0;
        this.b=0;
        this.c=0;
    }            
}

public void resize(double a, double b, double c) {
    if ( this.isValid(a,b,c) ) {
        this.a = a;
        this.b = b;
        this.c = c;        
    }
    //else let size remain unchanged
}

public TriangleShape getRandomTriangle() {
    TriangleShape t = new TriangleShape(5,8,9);
    return t;
}

public double area(){
    double area, s;
    s = (a+b+c)/2;
    area = Math.sqrt(s *(s-a) * (s-b) * (s-c));
    return area;
}

private boolean isValid(double a, double b, double c) {
    double s = (a+b+c)/2;
    if ( ((s-a) * (s-b) * (s-c)) <= 0 )
        return false;
    else
        return true;
}

public double perimeter() {
    double p;
    p = a+b+c;
    return p;
}

public double getA(){
    return a;
}
public double getB(){
    return b;
}
public double getC(){
    return c;
}

public void setLocation(Point2D location){
loc = location;
}

public Point2D getLocation(){
return loc;
}

public double getX(){
return loc.getX();
}

public double getY(){
return loc.getY();
}

Und die TriangleComponent Klasse:

public class TriangleComponent extends JComponent{

TriangleShape t;
double alpha, beta, gamma;
double a,b,c;
double X,Y;

@Override
protected void paintComponent(Graphics g) {
//super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
t = new TriangleShape(100,100,190);
t.setLocation(new Point2D.Double(100,500));
a = t.getA();
b = t.getB();
c = t.getC();

X = t.getX();
Y = t.getY();

///////////////Drawing Base line.....

g2.draw(new Line2D.Double(X,Y,(X+c),Y));    //line c...
g2.draw(new Line2D.Double((X+c), Y, ((X+c)+a*Math.cos(Math.PI+getBeta())), (Y+a*Math.sin(Math.PI+getBeta())))); //line a...


//JOIning the last end points
g2.draw(new Line2D.Double(X, Y, ((X+c)+a*Math.cos(Math.PI+getBeta())), (Y+a*Math.sin(Math.PI+getBeta()))));


System.out.println("X1 = "+X+"  Y1 = "+Y);
System.out.println("X2 = "+(X+c)+"  Y2 = "+Y);  
System.out.println("X3 = "+((X+c)+a*Math.cos(Math.PI+getBeta()))+" Y3 = "+ (Y+a*Math.sin(Math.PI+getBeta())));
//System.out.println("Alpha = "+getAlpha());
System.out.println("Gamma = "+(getGamma()*180)/Math.PI);
}

public double getAlpha(){
double temp = Math.acos(((Math.pow(c, 2)+Math.pow(b, 2))-Math.pow(a, 2))/(2*b*c));
System.out.println("Alpha = "+temp+" Degrees");
return temp;
}

public double getBeta(){
double temp = Math.acos(((Math.pow(c, 2)+Math.pow(a, 2))-Math.pow(b, 2))/(2*a*c));
System.out.println("Beta = "+temp+" Degrees");
return (temp);//* Math.PI)/180;
}

public double getGamma(){
double temp = Math.acos(((Math.pow(a, 2)+Math.pow(b, 2))-Math.pow(c, 2))/(2*b*a));
System.out.println("Gamma = "+temp+" Degrees");
return (temp);//* Math.PI)/180;
}

}

Dies funktioniert, aber ich brauche einen Weg zu zeichnen, das Dreieck, ohne sich auf Graphics2D oder zeichnen Sie direkt mit der paintComponent Methode. Gibt es eine Möglichkeit, dies zu tun?

InformationsquelleAutor Jaydeep | 2012-02-27

Schreibe einen Kommentar