旋转Java Graphics2D矩形?

我到处搜索,但找不到答案。

如何在Java中旋转矩形?

这是我的一些代码:

package net.chrypthic.Space;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class Space extends JPanel implements ActionListener{

Timer time;

public Space()

{

setVisible(true);

setFocusable(true);

addMouseMotionListener(new ML());

addMouseListener(new ML());

addKeyListener(new AL());

time=new Timer(5, this);

time.start();

}

public void paint(Graphics g)

{

super.paint(g);

Graphics2D g2d = (Graphics2D)g;

g2d.setColor(Color.WHITE);

Rectangle rect2 = new Rectangle(100, 100, 20, 20);

g2d.draw(rect2);

g2d.fill(rect2);

}

public void actionPerformed(ActionEvent ae) {

repaint();

}

public class AL extends KeyAdapter

{

public void keyPressed(KeyEvent e) {

}

public void keyReleased(KeyEvent e) {

}

}

public class ML extends MouseAdapter

{

public void mouseMoved(MouseEvent e) {

}

public void mousePressed(MouseEvent e){

}

}

}

我尝试了g2d.rotate(100D); 但它没有用。提前致谢。

这是我编辑的代码:

package net.chrypthic.Space;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Space extends JPanel implements ActionListener{

Timer time;

public Space()

{

setVisible(true);

setFocusable(true);

setSize(640, 480);

setBackground(Color.BLACK);

time=new Timer(5, this);

time.start();

}

public void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2d = (Graphics2D)g;

Rectangle rect1 = new Rectangle(100, 100, 20, 20);

g2d.setColor(Color.WHITE);

g2d.translate(rect1.x+(rect1.width/2), rect1.y+(rect1.height/2));

g2d.rotate(Math.toRadians(90));

g2d.draw(rect1);

g2d.fill(rect1);

}

public void actionPerformed(ActionEvent e)

{

repaint();

}

}

回答:

对于图像,必须将Graphics2D的drawImage方法与相对的AffineTransform一起使用。

对于形状,您可以旋转Graphics2D本身:

public void paintComponent(Graphics g)

{

super.paintComponent(g);

Graphics2D g2d = (Graphics2D)g;

g2d.setColor(Color.WHITE);

Rectangle rect2 = new Rectangle(100, 100, 20, 20);

g2d.rotate(Math.toRadians(45));

g2d.draw(rect2);

g2d.fill(rect2);

}

顺便说一句,您应该重写paintComponent方法而不是paint。

引用JComponent的API:

由Swing调用以绘制组件。应用程序不应直接调用绘画,而应使用repaint方法安排要重绘的组件。

此方法实际上将绘画工作委托给三个受保护的方法:paintComponent,paintBorder和paintChildren。按照列出的顺序调用它们,以确保子代出现在组件本身的顶部。一般来说,组件及其子代不应在分配给边框的插图区域中绘画。子类可以像往常一样仅重写此方法。只想专门化UI(外观)委托的paint方法的子类应该重写paintComponent。

还请记住,与执行仿射变换(例如旋转)时相比,对象会绕轴原点隐式旋转。因此,如果您打算将其绕任意点旋转,则应在将其平移回原点之前先对其进行旋转,然后再将其重新平移到所需的点。

以上是 旋转Java Graphics2D矩形? 的全部内容, 来源链接: utcz.com/qa/400690.html

回到顶部