日期:2014-05-20  浏览次数:20703 次

paint()和paintComponent的问题
Java code

import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;

class Test extends JFrame{
  public static void main(String args[]){
    Test frame = new Test();
    frame.setSize(400,300);
    frame.setVisible(true);  
  }
  public void paint(Graphics g){
    g.drawString("abc",10,10);
    System.out.println("paintint..");
  }
 public void paintComponent(Graphics g){
    System.out.println("in paint component...");
    g.drawString("bcd",20,20);
 }
}


paint()调用了 为什么abc却没显示,还有 什么时候调用paintComponent方法呢?

------解决方案--------------------
Java code
import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;

class Test extends JFrame{
    public static void main(String args[]){
        Test frame = new Test();
        JPanel board = new PaintBoard();
        board.setOpaque(false);
        frame.add(board);
        frame.setSize(400,300);
        frame.setVisible(true);
    }

    @Override
    public void paint(Graphics g){
        super.paint(g);
        g.drawString("abc",10,10);

        System.out.println("paintint..");
    }

    private static class PaintBoard extends JPanel{
        @Override
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            System.out.println("in paint component...");
            g.drawString("bcd",20,20);
        }
    }
}

------解决方案--------------------
谢谢提醒,直接add是让人蛋疼的做法
探讨
引用:

你这个程序设计上就有很大的问题,
第一,如果要在JFrame上添加什么东西或者绘制图形,需要获得其contentPane在contentPane上面操作才行,直接操作add或者重绘是没有意义的


add方法已经被修改了,可以用来添加组件。