saludos aqui les dejo un programa que me saco de apuro en graficacion jeje espero les sirva de algo alguno codigos. si les sirve de algo dejen muchos puntos
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JPanel;
/* Las instancias de la clase java.awt.geom.AffineTransform
representan la transformación de un sistema de coordenadas a
otro. AffineTransform se utilizó para guardar y restaurar la
transformación del estado de un Graphics2D. AffineTransform
también puede ser útil cuando se necesita para calcular y
almacenar coordenadas transformadas antes de dibujar.*/
public class puntorotacion extends JPanel {
private int grados = 0; /*Sólo se puede acceder al elemento desde
métodos de la clase, o sólo puede invocarse
el método desde otro método de la clase. */
public int getGrados() {
return grados;
}
public void setGrados(int grados) {
this.grados = grados;
repaint(); //Para repintar toda la pantalla
}
//@Override
public void paint(Graphics g) {
super.paint(g); //se borra el contenido anterior
double radian = Math.toRadians(grados); //se convierte a radianes lo grados
AffineTransform at = new AffineTransform();
at.rotate(radian, 100, 100); //se asigna el angulo y centro de rotacion
((Graphics2D) g).setTransform(at);
//se dibuja
g.setColor(Color.red);
g.drawRect(50, 50, 100, 100); //posicion de la figura
}
}
class panel{
public static void main(String[] args) {
final JFrame twisted = new JFrame("Imagen Giratoria";
twisted.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
twisted.setSize(200, 250);
final puntorotacion metal = new puntorotacion();
final JSlider rotar = new JSlider(-360,360); //barra de grados para rotar el cuadrado
/*En ocasiones es conveniente que un método no sea redefinido en una clase
derivada o incluso que una clase completa no pueda ser extendida.
Para esto está la cláusula final, que tiene significados levemente
distintos según se aplique a un dato miembro, a un método o a una clase.
Para una clase, final significa que la clase no puede extenderse.
Es, por tanto el punto final de la cadena de clases derivadas.Y
Para un método, final significa que no puede redefinirse en una clase derivada.*/
rotar.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
metal.setGrados(rotar.getValue());
}
});
rotar.setValue(0);
twisted.setLayout(new BorderLayout());
twisted.add(metal, BorderLayout.CENTER);
twisted.add(rotar, BorderLayout.SOUTH); //genera la barra para rotar la figura
twisted.setLocationRelativeTo(null); //Coloca la ventana de salida en el centro
twisted.setVisible(true);
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JPanel;
/* Las instancias de la clase java.awt.geom.AffineTransform
representan la transformación de un sistema de coordenadas a
otro. AffineTransform se utilizó para guardar y restaurar la
transformación del estado de un Graphics2D. AffineTransform
también puede ser útil cuando se necesita para calcular y
almacenar coordenadas transformadas antes de dibujar.*/
public class puntorotacion extends JPanel {
private int grados = 0; /*Sólo se puede acceder al elemento desde
métodos de la clase, o sólo puede invocarse
el método desde otro método de la clase. */
public int getGrados() {
return grados;
}
public void setGrados(int grados) {
this.grados = grados;
repaint(); //Para repintar toda la pantalla
}
//@Override
public void paint(Graphics g) {
super.paint(g); //se borra el contenido anterior
double radian = Math.toRadians(grados); //se convierte a radianes lo grados
AffineTransform at = new AffineTransform();
at.rotate(radian, 100, 100); //se asigna el angulo y centro de rotacion
((Graphics2D) g).setTransform(at);
//se dibuja
g.setColor(Color.red);
g.drawRect(50, 50, 100, 100); //posicion de la figura
}
}
class panel{
public static void main(String[] args) {
final JFrame twisted = new JFrame("Imagen Giratoria";
twisted.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
twisted.setSize(200, 250);
final puntorotacion metal = new puntorotacion();
final JSlider rotar = new JSlider(-360,360); //barra de grados para rotar el cuadrado
/*En ocasiones es conveniente que un método no sea redefinido en una clase
derivada o incluso que una clase completa no pueda ser extendida.
Para esto está la cláusula final, que tiene significados levemente
distintos según se aplique a un dato miembro, a un método o a una clase.
Para una clase, final significa que la clase no puede extenderse.
Es, por tanto el punto final de la cadena de clases derivadas.Y
Para un método, final significa que no puede redefinirse en una clase derivada.*/
rotar.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
metal.setGrados(rotar.getValue());
}
});
rotar.setValue(0);
twisted.setLayout(new BorderLayout());
twisted.add(metal, BorderLayout.CENTER);
twisted.add(rotar, BorderLayout.SOUTH); //genera la barra para rotar la figura
twisted.setLocationRelativeTo(null); //Coloca la ventana de salida en el centro
twisted.setVisible(true);
}
}

