2016-10-10 2 views
0

Я думаю, что у меня что-то неясно, но почему-то этот код дает мне пустое окно, но оно не окрашивает красный овал. Что мне не хватает?Рисование простого круга с помощью Java swing не работает

public class Test extends JPanel { 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponents(g); 
     g = this.getGraphics(); 
     Graphics2D g2 = (Graphics2D) g; 

     // Anti-aliasing 
     g2.setColor(new Color(255, 0, 0)); 
     g2.fillOval(0, 0, 20, 20); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Ball"); 
     Test panel = new Test(); 

     frame.getContentPane().add(panel); 
     frame.setPreferredSize(new Dimension(250, 200)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+2

'г = this.getGraphics();' Во-первых, удалить эту ерунду. Уже существует действительный объект «Graphics», с которым нужно рисовать. –

+0

Используйте графику, переданную paintComponent. –

ответ

4

paintComponent не является правильным, удалить этот g = this.getGraphics();

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D)g; 

    Ellipse2D.Double circle = new Ellipse2D.Double(xR, yR, diameter, diameter); 
    g2d.fill(circle); 
    ... 
} 
Смежные вопросы