Graphics2D Componente Drehen

bennemann8

Mitglied
Hallo zusammen.
Ich bin gerade dabei das Grundprinzip für ein Spiel in Java zu erstellen. Jetzt habe ich beim Drehen eines JPanel allerdings Probleme. Das ist bestimmt recht leicht zu lösen, nur komm ich nicht drauf wie :rtfm:
Aussehen soll das Ergebnis wie in Screen1.
Das JFrame (Spielfeld) besteht dabei aus zwei JPanel (PanelSeite), wobei das obere Panel um 180° gedreht werden soll (struktur).
Wenn ich das Programm ausführe, sieht es allerdings - nachdem ich mit der Maus über den Frame fahre - aus wie in Screen2.

zum besseren Verständnis, mein Quelltext:
Java:
public class PanelSeite extends JPanel {

    int angle;

    public PanelSeite(int angle) {
        this.angle = angle;
        initComponents();
    }

    @Override
    public void paintComponent(Graphics g) {
        {
            try {
                Graphics2D g2d = (Graphics2D) g;
                if (angle % 90 != 0) {
                    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                    qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
                    g2d.setRenderingHints(qualityHints);
                }
                //center of rotation is center of the panel
                int xRot = this.getWidth() / 2;
                int yRot = this.getHeight() / 2;
                g2d.rotate(Math.toRadians(angle), xRot, yRot);
                //draw image centered in panel
                super.paintComponent(g2d);

            } catch (Exception ex) {
                ex.printStackTrace(System.out);
            }

        public void initComponents(){ ... }
        }
    }}
Java:
    public static void main(String[] args) {
        // TODO code application logic here
        JPanel p1 = new PanelSeite(140);
        JPanel p2 = new PanelSeite(0);
        JFrame f = new Spielfeld();
        f.setSize(376, 509);
        f.setLocationRelativeTo(null);
        
        f.add(new PanelSeite(180));
        f.add(new PanelSeite(0));
        f.setVisible(true);
    }
screen.PNGscreen1.pngstruktur.png
 

bennemann8

Mitglied
niemand eine idee??
wenn ich die Buttons rausnehme und nur das Label in dem Panel habe, funktionierts. Scheint also irgendwie an den Buttons zu liegen. Ich hab schon so viel versucht, komme allerdings zu keinem besseren Ergebnis ;/
 

Foxei

Bekanntes Mitglied
Hallo benneman8,
das Problem hier ist das du nicht nur das ausgegebene Bild drehen musst sondern auch alle EventListener verschieben müsstest was das ganze erheblich schwieriger gestaltet.

Meine Idee: Wir drehen nicht das ausgegeben Bild sondern Bauen einen Komponenten der mit einer boolenischen Variable die Subkomponenten anders im Layout Positioniert. Zusätzlich drehen wir dann noch die JButton um sodass der Text auch auf dem Kopf steht und Fertig.

GamePanel.java
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JComponent;

/**
 *
 * @author Simon Schäfer <simon.schaefer@teamkoeln.com>
 */
public class GamePanel extends JComponent {

    private JButton btnRed, btnGreen, btnYellow;
    private final boolean rotated;

    public GamePanel() {
        rotated=false;
        initComp();
    }

    public GamePanel(boolean rotated) {
        this.rotated = rotated;
        initComp();
    }

    private void initComp() {
        setPreferredSize(new Dimension(500, 300));
        GridBagLayout layout = new GridBagLayout();
        layout.columnWeights = new double[]{rotated?0.0:1.0, 0.0, rotated?1.0:0.0, Double.MIN_VALUE};
        layout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
        setLayout(layout);

        btnRed = rotated?new RotatedButton("RED"):new JButton("RED");
        btnRed.setPreferredSize(new Dimension(100, 75));
        btnRed.setBackground(Color.RED);

        GridBagConstraints gbcRed = new GridBagConstraints();
        gbcRed.gridx = rotated?2:0;
        gbcRed.gridy = 0;
        gbcRed.anchor = rotated?GridBagConstraints.SOUTHEAST:GridBagConstraints.NORTHWEST;

        add(btnRed, gbcRed);

        btnGreen = rotated?new RotatedButton("GREEN"):new JButton("GREEN");
        btnGreen.setPreferredSize(new Dimension(100, 75));
        btnGreen.setBackground(Color.GREEN);

        GridBagConstraints gbcGreen = new GridBagConstraints();
        gbcGreen.gridx = 1;
        gbcGreen.gridy = 0;
        gbcGreen.anchor = rotated?GridBagConstraints.SOUTHWEST:GridBagConstraints.NORTHEAST;

        add(btnGreen, gbcGreen);

        btnYellow = rotated?new RotatedButton("YELLOW"):new JButton("YELLOW");
        btnYellow.setPreferredSize(new Dimension(100, 75));
        btnYellow.setBackground(Color.YELLOW);

        GridBagConstraints gbcYellow = new GridBagConstraints();
        gbcYellow.gridx = rotated?0:2;
        gbcYellow.gridy = 0;
        gbcYellow.anchor = rotated?GridBagConstraints.SOUTHWEST:GridBagConstraints.NORTHEAST;

        add(btnYellow, gbcYellow);
    }

    private class RotatedButton extends JButton {

        public RotatedButton(String text) {
            setText(text);
        }

        
        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g.create();
            g2.rotate(Math.toRadians(180),getWidth()/2,getHeight()/2);
            super.paintComponent(g2);
            g2.dispose();
        }
    }
}

Main.java
Java:
import java.awt.GridLayout;
import javax.swing.JFrame;

/**
 *
 * @author Simon Schäfer <simon.schaefer@teamkoeln.com>
 */
public class Main {
    
    private final JFrame frame;
    private final GamePanel top, bot;
    public Main() {
        frame=new JFrame("Spinning Panel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 1));
        
        top=new GamePanel();
        frame.add(top);
        
        bot=new GamePanel(true);
        frame.add(bot);
        
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    
    
    public static void main(String[] args){
        new Main();
    }
    
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
L Graphics2d zoomen AWT, Swing, JavaFX & SWT 3
L AWT graphics2d transform AWT, Swing, JavaFX & SWT 7
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
M JPanel und Graphics2D AWT, Swing, JavaFX & SWT 2
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
S Graphics2D: Transparent übereinander zeichnen AWT, Swing, JavaFX & SWT 7
S Graphics2D - setClip() AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
S AWT Pong - Probleme mit übergreifenden Objekten && Graphics2D AWT, Swing, JavaFX & SWT 3
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
N AWT Graphics2D mehrmals aufrufen AWT, Swing, JavaFX & SWT 5
Developer_X Swing Graphics2D.zoom, wie rückgängig machen? AWT, Swing, JavaFX & SWT 6
Developer_X Swing Graphics2D translate zerstört performance AWT, Swing, JavaFX & SWT 2
N graphics2d auf panel AWT, Swing, JavaFX & SWT 2
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
A Swing LAF unter Windows: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D AWT, Swing, JavaFX & SWT 5
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
cowabunga1984 Implementierung von Graphics2D AWT, Swing, JavaFX & SWT 2
C Graphics2D, Text abschneiden AWT, Swing, JavaFX & SWT 2
N Graphics2D mit unterschiedlichen Grauwerten befüllen AWT, Swing, JavaFX & SWT 3
F Graphics2D scale und Positionierung einer TextArea AWT, Swing, JavaFX & SWT 8
F JPanel: Graphics2D, scale und Mauskoordinaten AWT, Swing, JavaFX & SWT 4
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
M Graphics2D - abstract void draw(.) AWT, Swing, JavaFX & SWT 2
redztripe Graphics2D rotieren und rotiertes Bild abspeichern AWT, Swing, JavaFX & SWT 2
R AffinrTransform + Graphics2D verschieben AWT, Swing, JavaFX & SWT 3
R Graphics2D + Bild anzeigen. AWT, Swing, JavaFX & SWT 25
M Probleme mit Graphics2D AWT, Swing, JavaFX & SWT 7
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
C Componente in Container (inkl. "Untercontainer") suchen und zurückgeben AWT, Swing, JavaFX & SWT 3
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
P Swing Componente über Rahmen hinaus zeichnen AWT, Swing, JavaFX & SWT 2
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
H Feststellen ob eine Componente sichtbar (im Vordergund) ist? AWT, Swing, JavaFX & SWT 2
J Name von einer Componente AWT, Swing, JavaFX & SWT 3
K Listeners und das Ende einer Componente AWT, Swing, JavaFX & SWT 4
G SWT SWT Componente gesucht AWT, Swing, JavaFX & SWT 2
L Größe einer Componente herausfinden AWT, Swing, JavaFX & SWT 2
R Position einer Componente? AWT, Swing, JavaFX & SWT 9
G Componente Zeile fixieren AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
S Componente mehrmals verwenden ? AWT, Swing, JavaFX & SWT 3
P Hinzugefügte Componente ist inaktiv AWT, Swing, JavaFX & SWT 14
ARadauer swing html wysiwyg componente AWT, Swing, JavaFX & SWT 6
S Listener übergeordneter Componente Blockiert AWT, Swing, JavaFX & SWT 6
E JFrame Componente aus einer anderen klasse disposen AWT, Swing, JavaFX & SWT 3
G Farbe der Markierung einer Componente ändern AWT, Swing, JavaFX & SWT 2
O Graphics erstellt Componente scheinbar nicht richtig AWT, Swing, JavaFX & SWT 23
B Vorhandenes Graphicsobjekt auf Componente zeichnen AWT, Swing, JavaFX & SWT 19
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
B componente drucken AWT, Swing, JavaFX & SWT 3
C Componente verkleinern lasse wenn die Frame verkleinert wird AWT, Swing, JavaFX & SWT 2
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
K property panel und selektion einer componente in panel AWT, Swing, JavaFX & SWT 5
R Componente in JTabbedPane unsichtbar AWT, Swing, JavaFX & SWT 4
onek2705 ButtonArray drehen AWT, Swing, JavaFX & SWT 5
N Bild Drehen AWT, Swing, JavaFX & SWT 1
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
J Images drehen AWT, Swing, JavaFX & SWT 5
M Java FX 3D kamera drehen oder lieber die Gruppe drehen AWT, Swing, JavaFX & SWT 10
TheSorm Rectangle drehen AWT, Swing, JavaFX & SWT 9
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
C Rechteck drehen AWT, Swing, JavaFX & SWT 1
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
F 2D-Grafik Punkte um Mittelpunkt drehen AWT, Swing, JavaFX & SWT 11
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
M Rechtecke drehen AWT, Swing, JavaFX & SWT 15
P JComponent / JLabel drehen (Rotation) AWT, Swing, JavaFX & SWT 2
S Bild in Richtung Mauszeiger drehen AWT, Swing, JavaFX & SWT 2
D Swing Spielfeld drehen von Pentago endet in einer Katastrophe AWT, Swing, JavaFX & SWT 2
Jats 2D-Grafik Quadrat/Dreieck um Mittelpunkt drehen AWT, Swing, JavaFX & SWT 10
B 2D-Grafik Zeilen drehen im JEditorPane AWT, Swing, JavaFX & SWT 3
G Grafikobjekt drehen AWT, Swing, JavaFX & SWT 6
M Rechteck "umdrehen"/über die Kante drehen AWT, Swing, JavaFX & SWT 4
G Swing JLabel drehen für Kartenspiel AWT, Swing, JavaFX & SWT 9
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
multiholle Swing Panel um 90° drehen AWT, Swing, JavaFX & SWT 5
O JLabel um 90 Grad drehen ? AWT, Swing, JavaFX & SWT 9
E Bild drehen AWT, Swing, JavaFX & SWT 4
R Rechteck drehen! AWT, Swing, JavaFX & SWT 4
S BufferedImage drehen AWT, Swing, JavaFX & SWT 3
N Formen drehen und auf JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S wie Jpanel drehen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben