当前位置: 代码迷 >> J2SE >> paint()和paintComponent的有关问题
  详细解决方案

paint()和paintComponent的有关问题

热度:465   发布时间:2016-04-24 18:06:40.0
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方法已经被修改了,可以用来添加组件。
  相关解决方案