垂直旋转 JTextField

2023-12-09

我见过很多询问如何以任意角度旋转 JLabel 或图像的问题。我需要做的就是将文本字段旋转 90 度,但我还没有找到专门针对该角度的更简单的方法。我以为我正确复制了答案,但我的文本字段没有旋转。

这是我正在做的 SSCCE:

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class VerticalRotationSSCCE {

private static class VerticalTextField extends JTextField {

    private static final long serialVersionUID = 1L;

    public VerticalTextField(String text) {
        super(text);
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        int cx = getWidth() / 2;
        int cy = getHeight() / 2;
        g2.rotate(1/2 * Math.PI, cx, cy);
        super.paintComponent(g2);
    }

}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            JFrame frame = new JFrame();
            frame.getContentPane().add(new VerticalTextField("Foo"));
            frame.pack();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }

    });
}

}

关于如何旋转组件的答案中我缺少什么?


实际上,是的,这是可以做到的,但需要一些额外的库并访问一些已从网络上消失的源代码。

Using JXLayer,可以在运行时转换活动组件......

enter image description here

public class JLayerTransform {

    public static void main(String[] args) {
        new JLayerTransform();
    }

    public JLayerTransform() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new ExamplePane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ExamplePane extends JPanel {

        private JSlider slider;
        private FieldPane fieldPane;
        private DefaultTransformModel transformModel;

        public ExamplePane() {

            setLayout(new BorderLayout());

            slider = new JSlider(0, 360);
            slider.setValue(0);
            slider.addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {

                    transformModel.setRotation(Math.toRadians(slider.getValue()));

                }
            });

            fieldPane = new FieldPane();

            transformModel = new DefaultTransformModel();
            transformModel.setRotation(Math.toRadians(0));
            transformModel.setScaleToPreferredSize(true);
            JXLayer<JComponent> rotatePane = TransformUtils.createTransformJXLayer(fieldPane, transformModel);

            add(slider, BorderLayout.NORTH);
            add(rotatePane);

        }
    }

    public class FieldPane extends JPanel {

        public FieldPane() {
            setLayout(new GridBagLayout());

            JTextField field = new JTextField(10);
            field.setText("Hello world");

            add(field);

        }
    }
}

Caveats

这需要JXLayer(我用的是版本3),SwingX(我使用的是 1.6.4 版本)和 Piet Blok 的优秀示例,但似乎不再在网上可用......

我已将 JXLayer(版本 3)和 Piet 示例的所有源代码放入一个文件中zip我建议,如果您有兴趣,请获取一份副本并将其存放在安全的地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

垂直旋转 JTextField 的相关文章

随机推荐

  • 如何创建透明背景的渐变框阴影?

    我想用渐变框阴影制作div 我已经找到了如何处理 before 和模糊效果 但我想制作具有透明背景的div 例如 div height 200px width 200px background color rgba 255 255 255
  • 取消 Laravel 中的作业

    如果我调用以下内容 return AdventureJob dispatch event gt character gt refresh event gt adventure event gt levelsAtATime gt delay
  • THE 7 不尊重java安全随机种子

    我手头有一个难题 我创建了一个 AES 服务来加密 解密敏感信息 AES 密钥是使用 java 随机生成的SecureRandom 我有一个受保护的文件 用于存储种子 并且在调用服务时 种子将填充到安全随机类中 为了确保它有效 我有以下逻辑
  • 改变 PopupWindow 的重力

    我有一个必须显示弹出窗口的按钮 并且弹出窗口必须与按钮的右侧对齐 我就是这么做的 button setOnClickListener new View OnClickListener Override public void onClick
  • 如何在z3py中连接正则表达式?

    我想构造一个正则表达式 例如a b c z3中有一个函数re 可以将3个正则表达式连接在一起 所以我可以构造a b c 如下所示 assert str in re aabbc re re str to re a re str to re b
  • 适用于阿拉伯语、中文和希腊语的 Google TTS API

    我正在尝试从 google TTS API 下载 mp3 文件 这是代码 try String path http translate google com translate tts tl en q hello this is the n
  • Google Analytics API 错误 403:“用户无权访问个人资料”

    我一直在尝试学习如何使用Google Analytics API来获取网站流量数据 我不断遇到错误 提示用户无权访问该配置文件 我将服务帐户中的电子邮件地址添加到用户中 并尝试将其设置为有权访问所有配置文件的用户和管理员 但都不起作用 这是
  • 如何在 golang 结构中声明可为 null 的 json 字段?

    我通常喜欢在结构中使用原始数据类型的指针 这样当我 json Marshal 它们时 nil字段总是被翻译为 field null在 json 字符串中 但这将使创建新的结构实例变得困难 因为我无法使用文字 例如 type Book str
  • 如何在 Windows 启动时最小化应用程序 - Visual Basic

    这段代码有什么问题 我无法在启动时关闭我的应用程序 如果我改变me close 它实现了另一个值 但是对于me close 事实并非如此 我是编码和 Visual Basic 新手 Dim oktoclose As Boolean Priv
  • Twig:允许 HTML,但转义脚本

    我正在调查一个可能的XSS我的应用程序的攻击向量 我拥有的 FormType 带有单个textarea场地 通常该字段可以包含html tags Twig呈现插入数据的模板 我使用该表单插入以下内容 b Some valid HTML te
  • 在 session_destroy() 之后保留会话变量

    从我的 logout php
  • 以编程方式检索流畅配置,无需实例化 DbContext

    我有一个 DbContext 派生类 其成员实体类是使用 Fluent API 配置的 我想以编程方式检索这些配置和关系 执行此操作的代码已经就位 我将其移植到 T4 模板以进行代码生成 虽然大多数代码生成都使用反射 但流畅的配置需要实例化
  • Python - 转发带附件的 IMAP 电子邮件(imaplib、smtplib)

    我在转发带有附件的邮件时遇到问题 有人能指出我正确的方向吗 我猜它在 Fetch 语句中 但我不确定 import sys import uuid import re import smtplib import email address
  • RMI:按值传递还是按引用传递?

    我很难找到这个问题的明确答案 所以我想我应该在这里用我自己的具体例子来问 我正在创建一个多人垄断游戏 实际的垄断代码在服务器上运行 而客户端本质上是一个访问和控制该代码的 GUI 垄断游戏是由一个叫做 银行 的类控制的 假设我在客户端的 m
  • 将变量从 node.js 传递到 html

    我正在尝试将变量从 node js 传递到我的 HTML 文件 app get main function req res var name hello res render dirname views layouts main html
  • 试图获取非对象的属性

    这个脚本效果很好 我在脚本的顶部调用它 但是 如果未被禁止的用户进入该网站 他们会得到 Notice Trying to get property of non object in index php on line 20 功能 Check
  • 有没有办法在没有JFrame的情况下获取键盘事件?

    我想让我的程序在用户按下某个快捷方式时取消隐藏主窗口 有没有办法获取全局关键事件 而不仅仅是焦点位于应用程序框架内时发生的事件 这可能会做你想做的事 请注意 此代码正在检查 Ctr F 击键 我使用此代码从应用程序中的任何内容打开查找对话框
  • 如何创建每个单元格分为 4 个三角形的热图?

    我想将一个单元格分成一个单独的热图 具有多个颜色代码 Each square is divided into 4 triangles and each triangle has its own numerical value color c
  • 如何在直方图中绘制字典中的键和值

    我需要用以下字典绘制直方图 x 5 289 8 341 1 1565 4 655 2 1337 9 226 7 399 3 967 6 405 我需要首先将键从 1 到 9 排序 然后将这些值绘制在直方图中 显示最大概率为 1 0 我已经尝
  • 垂直旋转 JTextField

    我见过很多询问如何以任意角度旋转 JLabel 或图像的问题 我需要做的就是将文本字段旋转 90 度 但我还没有找到专门针对该角度的更简单的方法 我以为我正确复制了答案 但我的文本字段没有旋转 这是我正在做的 SSCCE import ja