【问题标题】:How can I rotate rectangle in Java?如何在 Java 中旋转矩形?
【发布时间】:2016-11-28 07:15:12
【问题描述】:

我的矩形代码:

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();
    }
}

【问题讨论】:

标签: java swing awt


【解决方案1】:
  1. 自定义绘画是通过覆盖paintComponent() 方法完成的,而不是paint()。不要忘记开头的 super.paintComponent()。

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

或者,我从未尝试将旋转直接应用于 Rectangle(我一直将其应用于绘画方法中的 Graphics 对象)。也许您只需要在ActionListener 的面板上调用repaint()。面板不会知道您已更改 Rectangle,因此您需要告诉它重新绘制自己。

【讨论】:

  • 当我喜欢这个链接时,stackoverflow.com/questions/7517688/… 动作部分不起作用。我该怎么做?
  • @Imogen,我不知道为什么您的代码不起作用,因为您没有发布代码。发布一个正确的SSCCE 来证明问题。
  • 是的,你说得对,我很抱歉,但我不知道如何将我的代码放在这里的注释部分:(
  • @Imogen,我无法编译或执行该代码。您没有阅读 SSCCE 链接。
猜你喜欢
  • 2018-02-22
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多