随机调用paintComponent

时间:2014-03-27 23:27:40

标签: java swing jpanel paint paintcomponent

我遇到了Swing的问题,我试图理解paintComponent是如何工作的,我只是不明白为什么在这种情况下它会被调用两次甚至三次(似乎是被随机打电话给我)。

package paintComponentTest;

import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class UI {

public static void main(String[] args) {
    JFrame testFrame = new JFrame();

    TestPanel testPanel = new TestPanel();
    testFrame.setContentPane(testPanel);

    testFrame.setSize(500, 500);
    testFrame.setVisible(true);
}
}

class TestPanel extends JPanel {

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

我正在处理一个不同的项目,我的paintComponent也被多次调用,而我只想被调用一次而且它阻止了我前进。

提前致谢!

1 个答案:

答案 0 :(得分:3)

基本上,绘画是你无法控制的,你可以做的(很少)。

当重绘管理器决定由于某些事件而需要重新绘制组件时(例如组件已重新调整大小(直接或因为父容器已调整大小)),会(间接)调用

paintComponent或者它已经变得可显示(现在可以在屏幕上看到或添加到可显示的组件中)和任意数量的系统事件。

你需要做的第一件事(除了在做任何自定义绘画之前调用super.paintComponent)是放弃你可能认为你对绘画过程的控制幻觉。

接下来,您应该通读Painting in AWT and Swing并了解绘画过程的工作原理。