我遇到了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也被多次调用,而我只想被调用一次而且它阻止了我前进。
提前致谢!
答案 0 :(得分:3)
基本上,绘画是你无法控制的,你可以做的(很少)。
当重绘管理器决定由于某些事件而需要重新绘制组件时(例如组件已重新调整大小(直接或因为父容器已调整大小)),会(间接)调用 paintComponent
或者它已经变得可显示(现在可以在屏幕上看到或添加到可显示的组件中)和任意数量的系统事件。
你需要做的第一件事(除了在做任何自定义绘画之前调用super.paintComponent
)是放弃你可能认为你对绘画过程的控制幻觉。
接下来,您应该通读Painting in AWT and Swing并了解绘画过程的工作原理。