2012-05-31 7 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

You должен, вероятно, добавить Java в качестве тега, чтобы люди знали, на каком языке вы работаете. Это поможет привлечь людей к вашему вопросу, которые с большей вероятностью смогут помочь. – TEOUltimus

+1

Какие ошибки вы получаете –

ответ

2

Добро пожаловать, и я предлагаю использовать oracle java api иногда. Это действительно дружелюбные разработчики. :)

У вас нет никакого треугольного класса со статическими полями x1 ... так почему 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, также не являются самыми чистыми. Вы устанавливаете их все на определенные числа, а затем поворачиваетесь и изменяете их в следующей строке. Зачем нужны начальные значения? Сниппет ниже имеет смысл для меня в любом случае (хотя это все еще кажется немного слишком magic numbery)

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); 

Если вы собираетесь нарисовать треугольник и заполнить его в тот же цвет, то рисование линий может быть ненужным для вы (делает разницу в 1pixel?). Если это так, вы можете удалить вызов треугольника() или заменить реализацию треугольника полигоном заполнения. В конце концов, что-то вроде этого является немного более гладким (по-прежнему может работать на нем, хотя):

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); 
Смежные вопросы