Java rotierende nicht quadratische JPanel-Komponente

Ich versuche, ein mit Textbeschriftungen gefülltes GridLayout zu drehen, um eine Ansicht mit Hochformatausrichtung aufgrund einer Einschränkung des Betriebssystems zu simulieren. Das JPanel, in dem sie sich befinden, ist nicht quadratisch. Wenn Sie die Etiketten also um 90 Grad drehen, werden sie basierend auf den Abmessungen des JPanel abgeschnitten. Ist es möglich, die Größe des Layouts basierend auf der Drehung so zu ändern, dass es immer noch in das JPanel passt? Nachforschungen zeigten viele Optionen für Rotationen, jedoch nur für quadratische JPanels.

Um mein Problem näher zu erläutern: Wenn ich die darin gemalten Etiketten drehe, bleiben sie auf das normal ausgerichtete x, y formatiert, und ich möchte, dass das Layout so formatiert wird, dass es in das um 90 Grad gedrehte x, y passt (also werden y und x im Grunde gespiegelt) ). Momentan wird ein Teil meines Gitters nach dem Drehen abgeschnitten. Die endgültige Anzeige sollte auch für alle 13 mal 24 Buchstaben im aktuellen JPnel passen.

Bearbeiten: Die Verwendung von vagen Kommentaren zeigt, dass ich nach dem Drehen malen muss, aber dabei das Raster ausschneidet und nicht auf meine bevorzugte Größe zurückfüllt.

JPanel-Code:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Screen extends JPanel {

   private JLabel[][] labels = new JLabel[13][24];
   private GridLayout layout;

   public Screen() {

      //setLocation(315,35);
      layout = new GridLayout(13, 24);
      layout.preferredLayoutSize(this);
      //setBounds(315, 65, 243, 350);
      setBounds(315, 65, 243, 350);
      setLayout(layout);

      for (int i = 0; i < 13; i++) {
         for (int j = 0; j < 24; j++) {
            labels[i][j] = new JLabel();
            labels[i][j].setBackground(Color.BLACK);
            add(labels[i][j]);
         }
      }

      //testing new letter
      for (int i = 0; i < 13; i++) {
         for (int j = 0; j < 24; j++) {
            labels[i][j].setText("T");
            labels[i][j].setForeground(Color.GREEN);
         }
      }

      setBackground(Color.black);
      setVisible(true);
      repaint();
   }

   @Override
   public void paintComponent(Graphics g) {
      //Rotates screen graphics to correct orientation
      Graphics2D g2d = (Graphics2D) g;
      int w2 = getWidth() / 2;
      int h2 = getHeight() / 2;
      g2d.rotate(Math.PI / 2, w2, h2);

      super.paintComponent(g);
      setSize(243,350);

   }
}

Testcode:

import javax.swing.JFrame;
import javax.swing.JLayeredPane;

public class RotateTest {

   public static class Frame extends JFrame {

      public Frame() {
         Screen screen = new Screen();

         JLayeredPane pane = new JLayeredPane();
         setUndecorated(false);
         setSize(800, 480);

         setVisible(true);
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         pane.add(screen, 0, 0);
         pane.setVisible(true);
         add(pane);
      }
   }

   public static void main(String[] args) {
      Frame frame = new Frame();
   }

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage