import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class RotateImage extends JFrame {
private double angle = Math.PI / 48;
public RotateImage() {
super("Bilder drehen");
String url = "file:images/pv6.gif"; // Pfad und Bildnamen anpassen...
Image image = null;
try {
image = ImageIO.read(new URL(url));
} catch (IOException e) {
System.out.println(e.getMessage());
}
final RotationPanel rotationPanel = new RotationPanel(image);
final String[] ANGLE = {
"3,75°","7,5°", "15°", "30°", "45°", "90°"
};
JComboBox jcb = new JComboBox(ANGLE);
// Actionlistener für Combo-Box
jcb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if ( ((JComboBox)e.getSource())
.getSelectedItem().equals("3,75°"))
angle = Math.PI / 48;
else if (((JComboBox)e.getSource())
.getSelectedItem().equals("7,5°"))
angle = Math.PI / 24;
else if (((JComboBox)e.getSource())
.getSelectedItem().equals("15°"))
angle = Math.PI / 12;
else if (((JComboBox)e.getSource())
.getSelectedItem().equals("30°"))
angle = Math.PI / 6;
else if (((JComboBox)e.getSource())
.getSelectedItem().equals("45°"))
angle = Math.PI / 4;
else if (((JComboBox)e.getSource())
.getSelectedItem().equals("90°"))
angle = Math.PI / 2;
System.out.println("Winkeleinstellung: "+angle/Math.PI*180 +"°");
}
});
JButton jbPos = new JButton("In Winkel-Grad-Schritten drehen (+)");
JButton jbNeg = new JButton("In Winkel-Grad-Schritten drehen (-)");
jbPos.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rotationPanel.rotateImagePos(angle);
}
});
jbNeg.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
rotationPanel.rotateImageNeg(angle);
}
});
JPanel jp = new JPanel();
jp.add(jbPos);
jp.add(jbNeg);
jp.add(jcb);
setLayout(new BorderLayout());
add(jp, "South");
add(rotationPanel);
Dimension screenSize;
screenSize = getToolkit().getScreenSize();
setContentPane(getContentPane());
setSize(screenSize.width*8/10, screenSize.height*8/10);
setLocation(screenSize.width*1/10, screenSize.height*1/10);
}
public static void main(String[] args) {
JFrame jf = new RotateImage();
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
jf.setVisible(true);
}
}
class RotationPanel extends JPanel {
Image img;
double rad;
public RotationPanel(Image image) {
this.img = image;
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
int cx = getWidth() / 2;
int cy = getHeight() / 2;
int imageWidth = img.getWidth(this);
int imageHeight = img.getHeight(this);
int x = -imageWidth / 2;
int y = -imageHeight / 2;
g2.translate(cx, cy);
g2.rotate(rad);
g2.drawImage(img, x, y, this);
}
public void rotateImageNeg(double radiant) {
rad += radiant;
repaint();
}
public void rotateImagePos(double radiant) {
rad -= radiant;
repaint();
}
}