重绘永远不会到达paintComponent();

时间:2017-10-17 11:37:52

标签: java swing graphics repaint

我回来时遇到了关于java-graphics的问题...我想在jframe上画一些东西,这里是代码:

PaintUtil级:

public class PaintUtil extends JPanel{

public PaintUtil(){
    this.setFocusable(true);
    this.requestFocus();
}

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        System.out.println("Repainted");

        g.drawstuff...
    }
}

主级:

public static PaintUtil util = new PaintUtil();

JFrame frame = new JFrame();
frame.setSize(500,600);
frame.setRezisable(false);
frame.add(util);
frame.setDefaultCloseOperation( 3 );
frame.getContentPane().setColor(Color.BLACK);
setup(); //This add some buttons
frame.setVisible(true);

util.repaint(); //not working
util.paintComponent(frame.getGraphics()); //works

你们能帮助我吗?

1 个答案:

答案 0 :(得分:2)

  

控制台中没有错误,没有消息,只有

frame.setLayout(null);

不要使用空布局。 Swing旨在与布局管理器一起使用。摆脱那种说法。

默认情况下,面板的大小为(0,0),因此无需绘制任何内容。

您需要覆盖面板的getPreferredSize()方法,以便布局管理器完成其工作。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。