【发布时间】:2016-05-29 11:53:31
【问题描述】:
用这两行代码调用方法后:
final Graphics canvasGraphics = screenCanvas.getGraphics();
canvasGraphics.fill3DRect(rectangleX, rectangleY, 500, 100, true);
程序运行时矩形闪烁,然后消失。但是,当我使用 MouseListener 将同一行放在匿名内部类中时:
screenCanvas.addMouseListener(new java.awt.event.MouseAdapter(){
public void mousePressed(MouseEvent event){
canvasGraphics.fill3DRect(rectangleX, rectangleY, 500, 100, true);
}
}
矩形停留在那里。是什么导致了这种行为?
【问题讨论】:
-
screenCanvas.getGraphics();- 不要这样做。创建一个JPanel,覆盖它的paintComponent方法,在里面调用super.paintComponent(g)并在那里进行自定义绘图。 -
那么我应该调用 drawPanel.paintComponent(screenCanvas.getGraphics()) 哪里 drawPanel 是被覆盖的 JPanel?
-
不,您应该在
paintComponent方法中执行所有绘画(您只需要一个面板)- 不需要getGraphics()。查看this 获取完整教程。顺便说一句,我认为矩形留在第二个 sn-p 中的原因是因为RepaintManager不会自动重新绘制框架,所以这样矩形会在那里停留一段时间。 (注意当你调整框架大小时它也会消失) -
非常感谢,这真的很有帮助。
-
使用 java.awt.Canvas 的唯一原因是你想直接控制绘画过程
标签: java swing jframe awt java-2d