我正在编写一个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();
}
});
clearRect
http://i58.tinypic.com/2d1l5w2_th.png 根据需要黑色背景。还没有轮换。到目前为止看起来不错。
http://oi60.tinypic.com/1zw1sm.jpg 用我的JSpinner旋转它...你看到之前的位置没有被移除(并注意我的按钮是如何随机加倍并将它们自己放在屏幕的顶部)。
clearRect
方法oi57.tinypic.com/2s84307.jpg 到目前为止布局很好,但我希望背景为黑色
oi57.tinypic.com/4rde8x.jpg 好极了!它旋转了。但请注意出现在我右上角的随机“15”的奇怪行为
oi58.tinypic.com/vymljm.jpg 最后......当我调整窗口大小时,您会看到我的整个屏幕都旋转了 - 而不仅仅是我想要旋转的粉红色图像
提示/修复/建议?谢谢!!我希望我已经提供了足够的信息 (例如,如果你坚持要求我们提出明确/有用的问题......那么不要限制你可以发布的图像数量......:/)
答案 0 :(得分:1)
被覆盖的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);
}