如何在Java中旋转矩形?

时间:2015-11-28 22:04:03

标签: 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();

我有一个按钮"旋转"。当用户用鼠标按下按钮时,矩形必须旋转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();
    }
}

1 个答案:

答案 0 :(得分:3)

  1. 自定义绘制是通过覆盖paintComponent()方法而不是paint()来完成的。不要忘记开头的super.paintComponent()。

  2. paintComponent()方法是绘画完成的地方,因此您需要旋转代码。因此,您可以设置一个变量来指示是否需要进行旋转。所以ActionListener所做的就是设置变量,然后调用repaint()。

  3. 或者,我从未尝试过直接将旋转应用于Rectangle(我总是将它应用于绘制方法中的Graphics对象)。也许您只需要在repaint()的面板上调用ActionListener即可。面板不会知道你已经改变了矩形,所以你需要告诉它重绘自己。

相关问题