package org.mrtwo;
import java.awt.*;
import javax.swing.*;
import java.util.*;import javax.swing.JPanel;
public class Tree extends JFrame{
MyPanel jp;
public static void main(String args[])
{
Tree tree = new Tree();
}
public Tree()
{
jp = new MyPanel();
this.add(jp);

this.setSize(1300,740);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class MyPanel extends JPanel
{
int flag=0;
public void paint(Graphics g)
{
if(flag == 0)
{
g.drawRect(0,0,100,100);
flag++;
}else
{
g.drawRect(200, 200, 100, 100);
}
}
}
java 中组件的paint方法在启动显示的时候会调用两次吗?上面代码中在eclipse中运行的时候,只会绘制第二个矩形,这说明paint调用了第二次,但据我拙见只有在窗口最小化最大化、大小改变、调用repaint方法才调用paint方法,第一次运行怎么就调用两次呢,什么原因呢。怎么解决呢、求大神指教!!paintJava绘制图形

解决方案 »

  1.   

    paint函数会根据需要调用多次
    还有,绘图函数不推荐使用paint,而是paintComponent,这样可以使用Swing提供的双缓冲功能
    class MyPanel extends JPanel
    {
        int flag=0;    @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            
            if(flag == 0)
            {
                g.drawRect(0,0,100,100);
                flag++;
            }else
            {
                g.drawRect(200, 200, 100, 100);
            }
        }
    }
      

  2.   


    你好,那个paint函数会根据需要调用多次是什么意思呢,就拿我上面的代码来说,为什么是调用了两次呢?求解,谢谢~
      

  3.   

    一楼正解~ paint 根据需要调用的意思是~ 只有操作系统才知道调用多少次~ 
      

  4.   


    这种就跟揭底的学习精神。。额~ 我不是很支持~ 电脑方面的内容海去了~ 当初我学到这里 也发现了这个问题~但是我选择的是相信 java 或者说sun 有提供我们其他的解决方案~ 或者可以用其他 java的处理方式来解决这个问题~ 我只会开车~ 还没深入到车里面怎么造的问题~ 所以帮不了你~ sorry~
      

  5.   

    没试过, 但是看Component代码发现setSize和setVisible会各调一次repaint.