import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.IOException;
import java.net.URL;
import javax.imageio.*;
import javax.swing.*;
public class Test {
public static class Drawing extends JComponent {
private BufferedImage img;
public Drawing(BufferedImage img) { this.img = img; }
private int degrees = 0;
public void setDegrees(int degrees) {
this.degrees = degrees;
repaint();
}
protected void paintComponent(Graphics g) {
Graphics2D g2=(Graphics2D) g;
double angle = Math.toRadians(degrees);
AffineTransform rot = AffineTransform.getRotateInstance(angle);
rot.concatenate(AffineTransform.getTranslateInstance(
-img.getWidth()/2, -img.getHeight()/2));
AffineTransform at = AffineTransform.getTranslateInstance(200,200);
at.concatenate(rot);
g2.drawImage(img, at, null);
}
}
public void run() {
BoundedRangeModel model = new DefaultBoundedRangeModel(0, 0, 0, 359);
JSlider slider = new JSlider(model);
Drawing draw = new Drawing(createImage());
model.addChangeListener(e -> draw.setDegrees(model.getValue()));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(slider, BorderLayout.SOUTH);
frame.add(draw);
frame.setVisible(true);
frame.setSize(800, 600);
}
private BufferedImage createImage() {
BufferedImage img = new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.createGraphics();
g.setColor(Color.RED);
g.fillRect(10, 10, 40, 40);
g.dispose();
return img;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Test().run());
}
}