Java GUI中的旋转方形面板

我想知道是否有可能实现一个方形但旋转90度的GUI面板(可能是JPanel)。 显然,将会有一个包含这个面板的顶层容器,而主面板在视觉上就是这个旋转的正方形面板。

更具体地说,我将一个面板(称为'A')分成4个相等的方形子面板,并用JLabels填充这些子面板,为此我想使用GridLayout。 最后,我会旋转'A'90度,以给我想要的。

从我读其他类似的问题,似乎你不能旋转JPanel本身,但你可以旋转其中包含的内容。 这适用于我的情况吗? 希望有人能指出。 谢谢。

关键的事情似乎是旋转graphics上下文绘制组件。 这是一个例子:

在这里输入图像描述

附录1:作为@Atreys评论,旋转的组件被绘制,但互动不佳。 如果组件必须保持可用,事件坐标也应该被转换。 比较这个(相当)更复杂的镜像组件的例子 。

附录2:如果您还需要转换鼠标坐标,则此示例可能会有所帮助。

附录3:或者,考虑在这里检查的drawString()示例。

 import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** @see https://stackoverflow.com/questions/6333464 */ public class RotatePanel extends JPanel { public RotatePanel() { this.setPreferredSize(new Dimension(320, 240)); this.add(new JLabel("Hello World!", JLabel.CENTER)); } @Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; int w2 = getWidth() / 2; int h2 = getHeight() / 2; g2d.rotate(-Math.PI / 2, w2, h2); super.paintComponent(g); } private void display() { JFrame f = new JFrame("RotatePanel"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new RotatePanel().display(); } }); } } 

在java.net上查看SwingHelper项目中的JXTransformer 。 该类用作组件装饰器,允许您将任意仿射变换应用于组件。

是的,您必须将顶层容器(JPanel或其他容器)作为旋转内容的项目。 真的,你不旋转的项目,你旋转的物品的绘画。

如果您只需旋转JLabel上的文本,则可以使用旋转图标 ,那么您不必担心旋转面板。