先贴一段程序:import java.awt.*;
import javax.swing.*;
public class JpanelTest extends JFrame{ /**
 * @param args
 */
JFrame frame;
public JpanelTest(){
frame=new JFrame();
frame.setSize(200,200);
setSize(500,500);
setVisible(true);
frame.setVisible(true);
}
public void paint(Graphics g){
//frame.paint(g);

super.paint(g);
g.drawOval(30,30,60,60);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JpanelTest panel=new JpanelTest();

}}这样的结果是会出现两个窗口,而图象是画在后面一个窗口上。
请问高手怎么能把图画在frame这个窗口中?
还有在整个过程中paint()方法是怎么开始执行的?没发现有什么方法或者类调用他。高手帮忙解释一下,谢谢~

解决方案 »

  1.   

    import java.awt.*;
    import javax.swing.*;
    public class Testa{ /**
     * @param args
     */
    JFrame frame;
    public Testa(){
    frame=new JFrame();
    frame.setSize(200,200);
    frame.setVisible(true);
    }
    public void paint(Graphics g){
    frame.paint(g);
    g.drawOval(30,30,60,60);
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Testa panel=new Testa();

    }}
    如果改成这样frame里也画不出来图象
      

  2.   

    Swing中不要使用override paint()的方法,这是以前AWT的做法。应该利用JComponent的paintComponent()。
      

  3.   

    import java.awt.*;
    import javax.swing.*;public class JpanelTest extends JFrame {
        public JpanelTest(){
            super();
            setContentPane(new JPanel() {
                public void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    g.drawOval(30,30,60,60);
                }
            });
        }
            
        public static void main(String[] args) {
    // TODO Auto-generated method stub
        JpanelTest panel=new JpanelTest();
        panel.setSize(500, 500);
        panel.setVisible(true);
    }}
      

  4.   

    谢谢stevech(西门町学士) 的回答