2015-11-23 2 views
0

Итак, я новичок в gui stuff, и я хочу сделать простую программу для печати круга для представления солнца, а затем рядом с ним. Я хочу напечатать еще один круг для представления планеты. Моя проблема в том, что когда я добавил метод paintPlanet, все, что возвращается в окне gui, теперь пустое. Даже когда я прокомментировал paintPlanet, круг для солнца не будет печататься, и я останусь с пустым окном. Может кто-нибудь помочь мне выяснить, где я ошибся, как исправить это, так что оба круга будут печататься? Я новичок в GUI вещи так легко от меня :)simple print circle Вопросы GUI

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 


public class PlanetsLogic extends JPanel 
{ 
private static final long serialVersionUID = 1L; 

public void paintSun(Graphics g) 
{ 
    super.paintComponent(g); 

    //create circle and fill it as yellow to represent the sun 
    g.setColor(Color.YELLOW); 
    g.drawOval(100, 75, 75, 75); 
    g.fillOval(100, 75, 75, 75); 
} //end paintSun 


public void paintPlanet(Graphics g) 
{ 
    super.paintComponent(g); 
    //create circle and fill it as yellow to represent the orbiting planet 
    g.setColor(Color.BLUE); 
    g.drawOval(75, 75, 75, 75); 
    g.fillOval(75, 75, 75, 75); 


}//end paintPlanet 

}//end class PlanetsLogic 

MAIN:

import javax.swing.JFrame; 

public class OrbitingPlants_main 
{ 

public static void main(String[] args) 
{ 

    PlanetsLogic planet = new PlanetsLogic(); 
    JFrame frame = new JFrame(); 

    frame.setTitle("Orbiting Planets"); 
    frame.setSize(300, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(planet); //add panel onto frame 
    frame.setVisible(true); 
} 

} 

ответ

5

Ваш paintSun и paintPlanet методы никогда не будет волшебно называется. Вместо этого ваш JPanel должен переопределить метод paintComponent, поскольку все чертежи там сделаны. Вы даже можете вызвать свои методы paintSun и paintPlanet из paintComponent, но я бы рекомендовал вызывать super.paintComponent(g) только один раз и только из вашего метода paintComponent переопределять себя.

например,

// use @Override to ask the compiler to check if this method is a true override 
@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); // HERE! 
    paintSun(g); 
    paintPlanet(g); 
} 

public void paintSun(Graphics g) { 
    // super.paintComponent(g); // nope, not here! 

    //create circle and fill it as yellow to represent the sun 
    g.setColor(Color.YELLOW); 
    g.drawOval(100, 75, 75, 75); 
    g.fillOval(100, 75, 75, 75); 
} //end paintSun 


public void paintPlanet(Graphics g) { 
    // super.paintComponent(g); // NO don't call this here 
    //create circle and fill it as yellow to represent the orbiting planet 
    g.setColor(Color.BLUE); 
    g.drawOval(75, 75, 75, 75); 
    g.fillOval(75, 75, 75, 75); 
}//end paintPlanet 
+0

Wow Я чувствую себя так глупо, что я не расслышал. Спасибо!! – user3712626

Смежные вопросы