为什么paintComponent不起作用?

时间:2015-05-08 12:40:49

标签: java paintcomponent

我对此代码有疑问。由于某种原因,paintComponent(Graphics g)根本不起作用,并且似乎不是一个如何强制它的答案。这是我的代码:

import javax.swing.JFrame;

public class Robotron extends JFrame
{

    public Robotron ()
    {
        //add(this); This one gave me an error
        setSize(800, 600);
        new TestFrame();
        setVisible(true);
    }


    public static void main(String [ ] args)
    {

        new Robotron();

    }

这是我的testFrame类,它具有paintComponent函数:

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;


public class TestFrame extends JPanel
{
     public void paintComponent(Graphics g) 
    {
         g.setColor(Color.BLACK);
         g.fillRect(0, 0, getWidth(), getHeight());
         g.setColor(Color.YELLOW);
         g.fillRect(100, 100, 10, 30);
         System.out.println("Abdullah Paint");

     }


    public TestFrame()
    {
        setFocusable(true);        
        repaint();        

    }


}

我可以做些什么才能让paintComponent真正发挥作用。我到底得到的只是一个空的JFrame,没有运行System.out.println的东西。

非常感谢,很长一段时间都在处理这个问题。

3 个答案:

答案 0 :(得分:0)

您需要将面板添加到框架中:

public Robotron ()
{
    //add(this); This one gave me an error
    setSize(800, 600);
    add(new TestFrame());
    setVisible(true);
}

答案 1 :(得分:0)

由于此原因,您未向JFrame添加任何内容

//add(this); 

在这里,您试图将组件添加到自身,这不会飞。

相反,您需要将TestFrame实例添加到Frame。

    add(new TestFrame());
    setSize(800, 600);
    setVisible(true);

答案 2 :(得分:0)

正如其他人所说,您需要将面板添加到框架中:

public Robotron() {

    add(new TestFrame());
    setSize(800, 600);
    setVisible(true);
}

由于其他人没有提到 ,您需要在被覆盖的方法中首先调用super.paintComponent(g)

@Override
public void paintComponent(Graphics g) {

    super.paintComponent(g);
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(Color.YELLOW);
    g.fillRect(100, 100, 10, 30);
    System.out.println("Abdullah Paint");
}

备注:

  • 不要在构造函数中调用repaint()。充其量它什么都不做。
  • 请勿为setSize(...)拨打电话,而是拨打pack()。为此,您需要覆盖面板中的getPreferredSize方法。