本帖最后由 jqctop1 于 2011-03-10 15:32:51 编辑

解决方案 »

  1.   


    额,可是JPanel类中没有paintComponent method哎
      

  2.   

    额,应该这样问,调用的是哪个父类里面的paintComponent method
      

  3.   

    是这个样子的:Swing 中, JComponent 的 paint() 方法会依次调用 paintComponent(), paintBorder(), paintChildren() 三个方法,其中
    paintComponent() 的作用为: 绘制组件自己本身
    paintBorder() 的作用为: 绘制自己的边框
    paintChildren() 的作用为:绘制添加到自己中的 子组件所有如果你 不调用 super.paintComponent() 只是不会绘制组件本身,也就是: 该组件本身为透明 
    但是,任然会有边框和加入其中的 子组件 例如:package prx.swing;import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class Test extends JPanel {
    public Test() {
    this.add(new JButton("test"));
    this.add(new JLabel("test"));
    this.add(new JTextField("test"));

    this.setBackground(Color.BLUE); //设置背景为蓝色
    this.setBorder(BorderFactory.createLineBorder(Color.red));//红色边框
    this.setPreferredSize(new Dimension(300, 300));
    }

    protected void paintComponent(Graphics g) {
    // super.paintComponent(g); //只会影响Test本身的绘制,不会影响边框和其他组件,取消注释将看到蓝色背景。
    g.fillRect(0, 0, 100, 100);
    }

    public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new Test());
    frame.pack();
    frame.setVisible(true);
    }
    }