【发布时间】:2015-06-01 04:45:01
【问题描述】:
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
super.paintComponent(g2);
g2.fillRect(20, 20, 200, 200);
g2.drawImage(map, 0, 0, 1004, 687, null);
}
这是我的 JPanel 中paintComponent 的代码。
当应用程序启动时,我可以看到矩形(这只是因为我想检查是否调用了paintComponent)。但是在我通过调整窗口大小或按下强制重绘() 的按钮强制重绘之前,地图不会绘制。
我尝试在几个地方调用 validate(),因为一些答案表明了这一点,但它不起作用。
【问题讨论】:
-
如何获得
map?你在用ImageIO.read(...)吗?请注意,validate()不应该在这里做任何事情,因为它与重新绘制组件无关,而是与布局其子组件(如果有)相关。 -
我将地图作为私有字段,在创建 JPanel 对象时实例化。所以,我有 private Image map = Toolkit.getDefaultToolkit().getImage("src/hw8/data/campus_map.jpg");
-
如果你使用
ImageIO.read(new File(...))会发生什么? -
永远不要使用任何带有“src”的路径,导出项目时该路径将不存在。
标签: java swing paintcomponent repaint drawimage