Java GUI中旋转的方形面板

| 我想知道是否有可能实现方形但旋转90度的GUI面板(可能是JPanel)。显然,将有一个包含此面板的顶层容器,从外观上看,主面板是此旋转的方形面板。 更具体地说,我将一个面板(称为\'A \')划分为4个相等的正方形子面板,并用JLabel填充这些子面板,我正在考虑为其使用GridLayout。最后,我将旋转90度以提供所需的内容。 根据我对其他类似问题的阅读,似乎您不能旋转JPanel本身,但是可以旋转其中包含的内容。这适用于我的情况吗?希望有人指出。谢谢。     
已邀请:
        关键的事情似乎是在旋转图形上下文之后绘制组件。这是一个例子: 附录1:@Atreys注释,绘制了旋转的组件,但交互性很差。如果组件必须保持可用状态,则还应转换事件坐标。比较这个(相当多)反映组件的更复杂的示例。 附录2:如果还需要变换鼠标坐标,则此示例可能会有所帮助。 附录3:或者,请考虑此处检查的“ 0”示例。
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上的文本,则可以使用“旋转图标”,那么您不必担心旋转面板。     

要回复问题请先登录注册