Drehen Sie eine Java Graphics2D Rechteck?
Ich habe überall gesucht und ich kann Sie nicht einfach die Antwort zu finden.
Wie wechsle ich ein Rechteck in java?
Hier ist mein code:
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){
}
}
}
Versuchte ich g2d.drehen(100); aber es hat nicht funktioniert.
Vielen Dank im Voraus.
Hier meine bearbeiteten code:
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();
}
}
InformationsquelleAutor der Frage chrypthic | 2011-09-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Bilder, die Sie verwenden müssen, drawImage - Methode von Graphics2D mit der relativen AffineTransform.
Für die Form, die Sie drehen können Graphics2D selbst:
Und btw, sollten Sie überschreiben paintComponent-Methode anstelle von Farbe.
Unter Berufung auf JComponent's API:
Erinnere mich auch, als wenn Sie führen Sie eine affine transformation, wie einer rotation, das Objekt ist implizit um die Achse gedreht Herkunft. Also, wenn Ihre Absicht ist es, drehen Sie es um einen beliebigen Punkt, sollten Sie vor und übersetzt es zurück zum Ursprung, zu drehen und dann wieder traslating Sie es an die gewünschte Stelle.
InformationsquelleAutor der Antwort Heisenbug
Graphics.create()
undGraphics.dispose()
ermöglichen Ihnen das speichern des aktuellen Transformations-Parameter (ebenso wie die aktuelle schriftart, Strichstärke, Farbe, etc.), und Sie später wiederherstellen. Es ist das äquivalent vonglPushMatrix()
undglPopMatrix()
in OpenGL.Können Sie auch eine inverse rotation wenn Sie zog das Rechteck wiederherstellen der Transformationsmatrix zurück zu Ihrem ursprünglichen Zustand. Jedoch, floating-point-Annäherungen während substractions kann führen zu einem falschen Ergebnis.
InformationsquelleAutor der Antwort Aurélien Ribon
Weitere Möglichkeit ist die Verwendung
Path2D
mit ihm können Sie drehen Sie die Pfad-und nicht nur die gesamte Grafik-Objekt:InformationsquelleAutor der Antwort Daniel De León
Das einzige problem mit g2d.drehen ist, dass es nicht drehen Sie es um einen bestimmten Punkt. Es wird meist Durcheinander, wo Sie wollen Ihr Bild, und dann Sie zwingen, sich zu bewegen, die x-und y-Koordinaten des Bildes. Ich würde es nicht verwenden,vor allem für ein Spiel. Was sollten Sie suchen, zu drehen, einen Punkt in java.
InformationsquelleAutor der Antwort Devon Ward