C'est un peu subjectif, tout dépend de ce que vous voulez réaliser.
Le code suivant utilise un AffineTransform
pour faire tourner le rectangle, mais pour le faire, je dois obtenir un PathIterator
et ajoutez-le à Path2D
public class SpinBox {
public static void main(String[] args) {
new SpinBox();
}
public SpinBox() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new SpinPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class SpinPane extends JPanel {
private Rectangle box = new Rectangle(0, 0, 100, 100);
private float angle = 0;
public SpinPane() {
Timer timer = new Timer(1000/60, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
angle += 1;
repaint();
}
});
timer.setRepeats(true);
timer.start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth() - 1;
int height = getHeight() - 1;
int x = (width - box.width)/2;
int y = (height - box.height)/2;
Graphics2D g2d = (Graphics2D) g.create();
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(angle), box.x + (box.width/2), box.y + (box.height/2));
PathIterator pi = box.getPathIterator(at);
Path2D path = new Path2D.Float();
path.append(pi, true);
g2d.translate(x, y);
g2d.draw(path);
g2d.dispose();
}
}
}
Vous aimeriez avoir regard sur [ce] (http://stackoverflow.com/questions/11911610/affinetransform-rotate-how-do-i-xlate-rotate-and-scale-at-the-same-time/11911758#11911758) et [ceci] (http: //stackoverflow.com/questions/12824684/change-the-angle-position-of-a-drawing-with-a-algorithm-in-java/12826882#12826882) et [this] (http://stackoverflow.com/questions/11911610/affinetransform-rotate-how-do-i-xlate-rotate-and-scale-at-the-same-time/11911758 # 11911758). Pendant qu'ils travaillent avec des images, ils utilisent AffineTransform pour effectuer leurs rotations. – MadProgrammer
Vous pouvez également consulter [Rectangle # getPathIterator] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Rectangle2D.html#getPathIterator (java.awt.geom. AffineTransform)) qui vous permettra de passer directement la transformation – MadProgrammer