如何在Java中旋转矩形?
我的矩形代码:如何在Java中旋转矩形?,java,swing,awt,Java,Swing,Awt,我的矩形代码: 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(); 我有
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();
}
}
paintComponent()
方法而不是paint()完成的。不要忘记开始时的super.paintComponent()paintComponent()
方法是完成绘制的地方,因此您需要旋转代码。因此,您可以设置一个变量来指示是否需要进行旋转。因此,ActionListener
所做的就是设置变量,然后调用repaint()ActionListener
中的面板上调用repaint()
。面板不会知道您更改了矩形,因此您需要告诉它重新绘制自己
paintComponent()
方法而不是paint()完成的。不要忘记开始时的super.paintComponent()paintComponent()
方法是完成绘制的地方,因此您需要旋转代码。因此,您可以设置一个变量来指示是否需要进行旋转。因此,ActionListener
所做的就是设置变量,然后调用repaint()或者,我从未尝试将旋转直接应用于矩形(在绘制方法中,我始终将其应用于图形对象)。也许您只需要在
ActionListener
中的面板上调用repaint()
。面板不会知道您更改了矩形,因此您需要告诉它重新绘制自身。可能重复的可能重复的可能重复的“当我喜欢此链接时”操作部分不起作用。我该怎么做?@Imogen,我不知道为什么你的代码不起作用,因为你没有发布代码。发布一个适当的说明问题的帖子。是的,你是对的,很抱歉,我不知道如何将我的代码放在这里注释部分:(@Imogen,我无法编译或执行那些代码。你没有阅读SSCCE
链接。当我喜欢这个链接时,动作部分不起作用。我该怎么做?@Imogen,我不知道为什么你的代码不起作用,因为你没有发布代码。发布一个正确的说明问题的链接。是的,对不起,我不知道我该怎么写我在这里的代码注释部分:(@Imogen,我无法编译或执行该代码。您没有阅读SSCCE
链接。