2012-05-31 1 views
-1

삼각형을 채우려고합니다. 직접 사용하려고 시도했습니다.삼각형을 채우려 고합니다

g.fillPolygon(Triangle.x1, Triangle.x2, Triangle.x3, Triangle.y1, 
     Triangle.y2, Triangle.y3); 

일부 오류가 발생합니다. 아무도 이것으로 나를 도울 수 있습니까?

import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 

public class Vehicle extends JFrame 

{ 
    final int WIDTH = 900; int HEIGHT = 650; 



public Vehicle() 
    { 
     //the following code creates the JFrame 
     super("Radical Racing"); 
     setSize(WIDTH,HEIGHT); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 

} 
public void paint(Graphics g) 
{ 

    g.setColor(Color.DARK_GRAY); 
    g.fillRect(0,0,WIDTH,HEIGHT); 


    int x1, y1 ,x2, y2, x3,y3; 
    x1 = x2 = x3 = 200; 
    y1 = y2 = y3 = 390; 

    { 
      triangle (g, x1=174, y1, x2=204, y2, x3=189, y3=360); 

    } 
    g.setColor(Color.green); 
    g.fillPolygon(Triangle.x1, Triangle.x2, Triangle.x3, Triangle.y1, Triangle.y2, Triangle.y3); 
    triangle(g,x1,y1,x2,y2,x3,y3); 
} 

void triangle(Graphics g,int x1,int y1, 
     int x2, int y2, int x3, int y3){ 
     g.drawLine (x1, y1, x2, y2); 
     g.drawLine (x2, y2, x3, y3); 
     g.drawLine (x3, y3, x1, y1); 
} 



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

} 
+0

에게 당신을 아마도 사람들이 사용하는 언어를 알기 위해 자바를 태그로 추가해야합니다. 이렇게하면 사람들이 귀하의 질문에 도움을 줄 수있는 사람들을 안내 할 수 있습니다. – TEOUltimus

+1

어떤 오류가 발생하고 있습니까? –

답변

2

가끔 오라클 자바 API를 사용하는 것이 좋습니다. 정말 개발자에게 친숙합니다. :)

정적 x1 ... 필드가있는 Triangle 클래스가 없으므로 왜 Triangle.x1 ...? :) 그리고 블록이 삼각형()을 호출하는 이유는 무엇입니까?

import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 
public class Vehicle extends JFrame { 

    final int WIDTH = 900; 
      int HEIGHT = 650; 

    public Vehicle() { 
     // the following code creates the JFrame 
     super("Radical Racing"); 
     setSize(WIDTH, HEIGHT); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 

    } 
    public void paint(Graphics g) { 

     g.setColor(Color.DARK_GRAY); 
     g.fillRect(0, 0, WIDTH, HEIGHT); 

     int x1, y1, x2, y2, x3, y3; 
     x1 = x2 = x3 = 200; 
     y1 = y2 = y3 = 390; 
     triangle(g, x1 = 174, y1, x2 = 204, y2, x3 = 189, y3 = 360); 

     g.setColor(Color.green); 
     g.fillPolygon(new int[] {x1, x2, x3}, new int[] {y1, y2, y3}, 3); 
     triangle(g, x1, y1, x2, y2, x3, y3); 
    } 

    void triangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3) { 
     g.drawLine(x1, y1, x2, y2); 
     g.drawLine(x2, y2, x3, y3); 
     g.drawLine(x3, y3, x1, y1); 
    } 

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

} 
2

nvrfrgt 응답 작동하고 있지만 염두에두고 가치가있다 (그리고 코멘트를 위해 너무 오래했다) 정리할 수있는 다른 일이있다 (그에게 +1 준) 한 버그를 해결합니다.

첫째로, 나는 HEIGHT이 마지막 일 것이라고 생각 했습니까? 그렇지 않으면 소문자로 만드십시오.

경주 용 삼각형 또는 무언가를 그리는 경우 나중에 차이가 날 수있는 성능 문제 - 동일한 삼각형을 두 번 그리기 (x 및 y 값을 변경하지 않음)하므로이 중 하나가 낭비됩니다.

triangle (g, x1=174, y1, x2=204, y2, x3=189, y3=360); 
... 
triangle(g, x1, y1, x2, y2, x3, y3); 

x 및 y 값을 초기화하는 방법 중 가장 깨끗한 것도 아닙니다. 모든 숫자를 특정 숫자로 설정 한 다음 돌아 서서 다음 줄에서 변경하십시오. 초기 값을 갖는 이유는 무엇입니까?

int x1 = 174; int x2 = 204; int x3 = 189; 
int y1 = 390; int y2 = 390; int y3 = 360; 
triangle(g, x1, y1, x2, y2, x3, y3); 

당신이 불필요 수 있습니다 다음 라인을 그리기 삼각형을 그리고 같은 색상을 채울려고하는 경우 (즉, 아직 조금 너무 magic numbery이 보이지만) 코드 조각 아래 어쨌든 나에게 더 의미 당신 (1 픽셀의 차이를 만들어?). 이 경우 triangle() 호출을 제거하거나 삼각형 구현을 채우기 다각형으로 바꿀 수 있습니다. 결국, 이런 걸 좀 더 매끄러운은 (여전히 비록 작업 할 수 있습니다)입니다 :

public class Vehicle extends JFrame { 

    final int WIDTH = 900; 
    final int HEIGHT = 650; // Made this final 

    public Vehicle() { 
     // the following code creates the JFrame 
     super("Radical Racing"); 
     setSize(WIDTH, HEIGHT); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public void paint(Graphics g) { 

    g.setColor(Color.DARK_GRAY); 
    g.fillRect(0, 0, WIDTH, HEIGHT); 

    int x1 = 174; int x2 = 204; int x3 = 189; 
    int y1 = 390; int y2 = 390; int y3 = 360; 
    g.setColor(Color.green); 
    // Got rid of redundant drawing 
    triangle(g, x1, y1, x2, y2, x3, y3); 
    } 

    void triangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3) { 
    // Left both the lines and the fill so you could play with color or something. 
    g.drawLine(x1, y1, x2, y2); 
    g.drawLine(x2, y2, x3, y3); 
    g.drawLine(x3, y3, x1, y1); 
    g.fillPolygon(new int[] {x1, x2, x3}, new int[] {y1, y2, y3}, 3); 
    } 

    public static void main(String[] args) { 
    // Want to save this as something so you can move it around later 
    Vehicle greenTriangle = new Vehicle(); 
    } 
0

첫 세트 색상 :

g.setColor(R, G, B); 

그런 다음 그것을 채우기 :

g.fillTriangle(x1, y1, x2, y2, x3, y3);