我的矩形代码:
class Rectangle extends JPanel {
int x = 105;
int y= 100;
int width = 50;
int height = 100;
public void paint(Graphics g) {
g.drawRect (x, y, width, height);
g.setColor(Color.WHITE);
}
Rectangle r = new Rectangle();
而我有一个按钮“旋转”。当用户用鼠标按下按钮时,矩形必须旋转15度。
这是我的操作代码:
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
if( source == rotate){
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(15), r.getX() + r.getWidth()/2, r.getY() + height/2);
r.add(transform);
}
}
但是代码不起作用。我不知道为什么?你怎么想呢?
我编辑的操作代码部分:
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
if( source == rotate){
Paint p = new Paint();
panel1.add(r);
repaint();
}
}
class Paint extends JPanel {
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
g2d.translate(r.getX()+(r.WIDTH/2), r.getY()+(r.HEIGHT/2));
g2d.rotate(Math.toRadians(15));
r.equals(g2d);
repaint();
}
}
>
自定义绘制是通过重写pintComponent()
方法而不是pintingComponent()来完成的。不要忘记一开始就使用super. pintComponent()。
的方法是绘画完成的地方,所以你需要旋转代码。所以你可以设置一个变量来指示你是否需要做旋转。所以所有的
ActionListener
所做的就是设置变量,然后调用repaint()。
或者,我从未尝试过直接将旋转应用于Rectgle(我一直将其应用于绘图方法中的Graphics对象)。也许您只需要在ActionListener
中的面板上调用repaint()
。面板不会知道您更改了Rectgle,因此您需要告诉它重新绘制自己。