2015-03-21 4 views
1

Я хочу нарисовать звезду с некоторых точек. Моя проблема в том, что она не показывает линии для моей маленькой звезды. Что мне здесь не хватает? Я делаю каждую точку, делая линии, устанавливая цвет, и это просто не показывает мою звезду. Он показывает кадр, но я думал, что проблема не в кадре, а в фактической части кода. Что вы предлагаете попробовать?Как нарисовать звезду в Java?

public class StarClass 
implements Icon { 
    static JFrame frame; 
    public static void main(String[] args) { 
    JFrame frame = new JFrame(); 

    frame.setSize(400, 400); 
    frame.setTitle("My Star"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    } 


    @Override 
    public void paintIcon(Component c, Graphics g, int x, int y) { 

    Graphics2D g2 = (Graphics2D) g; 

    //points 
    Point2D.Double pt1 
     = new Point2D.Double(100, 10); 
    Point2D.Double pt2 
     = new Point2D.Double(125, 75); 
    Point2D.Double pt3 
     = new Point2D.Double(200, 85); 
    Point2D.Double pt4 
     = new Point2D.Double(150, 125); 
    Point2D.Double pt5 
     = new Point2D.Double(160, 190); 
    Point2D.Double pt6 
     = new Point2D.Double(100, 150); 
    Point2D.Double pt7 
     = new Point2D.Double(40, 190); 
    Point2D.Double pt8 
     = new Point2D.Double(50, 125); 
    Point2D.Double pt9 
     = new Point2D.Double(0, 85); 

    //lines 
    Line2D.Double ln1 
     = new Line2D.Double(pt1, pt2); 
    Line2D.Double ln2 
     = new Line2D.Double(pt2, pt3); 
    Line2D.Double ln3 
     = new Line2D.Double(pt3, pt4); 
    Line2D.Double ln4 
     = new Line2D.Double(pt4, pt5); 
    Line2D.Double ln5 
     = new Line2D.Double(pt5, pt6); 
    Line2D.Double ln6 
     = new Line2D.Double(pt6, pt7); 
    Line2D.Double ln7 
     = new Line2D.Double(pt7, pt8); 
    Line2D.Double ln8 
     = new Line2D.Double(pt8, pt9); 

    //color of lines 
    g2.setColor(Color.BLUE); 

    //draw the lines 
    g2.draw(ln1); 
    g2.draw(ln2); 
    g2.draw(ln3); 
    g2.draw(ln4); 
    g2.draw(ln5); 
    g2.draw(ln6); 
    g2.draw(ln7); 
    g2.draw(ln8); 

    } 

    @Override 
    public int getIconWidth() { 
     return 200; 
    } 

    @Override 
    public int getIconHeight() { 
     return 200; 
    } 
} 
+0

Знаете ли вы, что делает «реализует» и что он не делает? – immibis

ответ

1

Вы должны найти лучшее место, чтобы сделать все это, чем в paintIcon.
Этот метод вообще не называется в вашем случае.

Ваш код исправлен. Кажется, вы просто пропустили 1-2 строки
от звезды (этот вопрос вы должны уметь отлаживать самостоятельно).

import java.awt.*; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 

import javax.swing.*; 

class DrawPanel extends JPanel { 

    private static final long serialVersionUID = 776058311964590886L; 

    public void paintComponent(Graphics g) { 

     Graphics2D g2 = (Graphics2D) g; 

     // points 
     Point2D.Double pt1 = new Point2D.Double(100, 10); 
     Point2D.Double pt2 = new Point2D.Double(125, 75); 
     Point2D.Double pt3 = new Point2D.Double(200, 85); 
     Point2D.Double pt4 = new Point2D.Double(150, 125); 
     Point2D.Double pt5 = new Point2D.Double(160, 190); 
     Point2D.Double pt6 = new Point2D.Double(100, 150); 
     Point2D.Double pt7 = new Point2D.Double(40, 190); 
     Point2D.Double pt8 = new Point2D.Double(50, 125); 
     Point2D.Double pt9 = new Point2D.Double(0, 85); 

     // lines 
     Line2D.Double ln1 = new Line2D.Double(pt1, pt2); 
     Line2D.Double ln2 = new Line2D.Double(pt2, pt3); 
     Line2D.Double ln3 = new Line2D.Double(pt3, pt4); 
     Line2D.Double ln4 = new Line2D.Double(pt4, pt5); 
     Line2D.Double ln5 = new Line2D.Double(pt5, pt6); 
     Line2D.Double ln6 = new Line2D.Double(pt6, pt7); 
     Line2D.Double ln7 = new Line2D.Double(pt7, pt8); 
     Line2D.Double ln8 = new Line2D.Double(pt8, pt9); 

     // color of lines 
     g2.setColor(Color.BLUE); 

     // draw the lines 
     g2.draw(ln1); 
     g2.draw(ln2); 
     g2.draw(ln3); 
     g2.draw(ln4); 
     g2.draw(ln5); 
     g2.draw(ln6); 
     g2.draw(ln7); 
     g2.draw(ln8); 
    } 
} 

public class StarClass { 

    static JFrame frame; 

    public static void main(String[] args) { 

     DrawPanel panel = new DrawPanel(); 

     JFrame frame = new JFrame(); 
     frame.getContentPane().add(panel); 

     frame.setSize(400, 400); 
     frame.setTitle("My Star"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

} 
+0

где я должен это делать? im новое для java действительно. – Layman

+0

приятный Спасибо! – Layman