我正在编写一个GUI,它将进行一些图形转换/旋转等。
我的问题是,当我尝试翻译我的图形时,
(a)整个屏幕翻译而不是我的一个小绘画区域
(b) 旧油漆留在那里,留下一个大的油漆斑点而不是翻译后的图像
(c) 如果我使用 clearRect
方法让我避免 (b),整个屏幕变白,(a) 仍然是一个问题
我的DrawPanel类(无论出于何种原因,我称之为"LaunchTubeImage")
private class LaunchTubeImage extends JPanel {
private Color colour;
public LaunchTubeImage(Color color) {
super();
this.colour = color;
}
public void paintComponent(Graphics g) {
Graphics2D gg = (Graphics2D)g;
double theta = (double)angle.getValue();
theta = Math.toRadians(theta);
gg.rotate(theta,tubeImage.getSize().width/2 + 10,
tubeImage.getSize().height - 50);
g.setColor(colour);
g.clearRect(0,0,getWidth(),getHeight());
g.fillRect(tubeImage.getSize().width/2,
tubeImage.getSize().height - 100 , 10, 50);
}
}
在我的代码中调用它的地方
tubeImage = new LaunchTubeImage(Color.MAGENTA);
angle.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e) {
tubeImage.repaint();
}
});
案例 1:注释掉我发布的第一个代码块中的clearRect
http://i58.tinypic.com/2d1l5w2_th.png黑色背景如愿以偿。尚未旋转。到目前为止看起来不错。
http://oi60.tinypic.com/1zw1sm.jpg用我的JSpinner旋转了它...您会看到之前的位置没有被删除(请注意我的按钮如何随机加倍并将自己放在屏幕顶部)。
案例 2:保持clearRect
方法
oi57.tinypic.com/2s84307.jpg到目前为止,布局很好,但我希望背景是黑色的
oi57.tinypic.com/4rde8x.jpg耶!它旋转了。但是请注意出现在我右上角的随机"15"的奇怪行为
oi58.tinypic.com/vymljm.jpg最后...当我调整窗口大小时,您会看到我的整个屏幕都旋转了 - 而不仅仅是我想旋转的粉红色图像
提示/修复/建议?谢谢!!我希望我提供了足够的信息(附言,如果您坚持要求我们提出清晰/有用的问题......然后不要限制您可以发布的图像数量...:/)
的paintComponent
方法的第一行通常应为super.paintComponent(g)
。在 JPanel 上,这将导致使用背景色清除绘图区域。如果你想用不同的颜色清除背景,你可以通过手动填充一个矩形来做到这一点(不鼓励clearRect
,请参阅 JavaDoc),但当然,这必须在应用任何转换之前完成。
所以你的方法可能看起来像这样:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(colour);
g.fillRect(0,0,getWidth(),getHeight());
Graphics2D gg = (Graphics2D)g;
double theta = (double)angle.getValue();
theta = Math.toRadians(theta);
gg.rotate(theta,tubeImage.getSize().width/2 + 10,tubeImage.getSize().height - 50);
gg.fillRect(tubeImage.getSize().width/2,tubeImage.getSize().height - 100 , 10, 50);
}