java - 如何翻转 JFrame 及其子项?

标签 java swing user-interface paint

这可能看起来很愚蠢(而且可能确实如此),但我如何才能将 JFrame 中的所有组件颠倒过来? JFrame 中的所有内容都必须围绕 JFrame 中间的轴垂直翻转,包括控件上的文本。最好使用 JTextFieldJButton 等。即使翻转也能按预期工作。

我进行了一些搜索,但没有发现任何对这个主题有帮助的内容。

有没有比手动更改布局然后扩展和覆盖所用每个控件的绘制方法更简单的方法?

编辑:我设法让它工作。可以看到my answer below .

最佳答案

您可以轻松翻转 GUI,而无需修改所有组件,只需修改最顶层容器的 paint 方法即可:

class ReversedPanel extends Component {
    @Override
    public void paint(Graphics g) {
        BufferedImage im = new BufferedImage(this.getWidth(), this.getHeight(),
                BufferedImage.TYPE_3BYTE_BGR);
        // Paint normally but on the image
        super.paint(im.getGraphics());

        // Reverse the image
        AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
        tx.translate(0, -im.getHeight());
        AffineTransformOp op = new AffineTransformOp(tx,
                AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        im = op.filter(im, null);

        // Draw the reversed image on the screen
        g.drawImage(im, 0, 0, null);
    }
}

虽然这种错觉并不完美:当用户将鼠标悬停在按钮的原始位置上时,该按钮将正确显示。

显然,这并没有考虑到要复杂得多的逆转事件。

关于java - 如何翻转 JFrame 及其子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392514/

相关文章:

java - Google Voice 接收新来电通知

java - JVM 能否优化引用 null(null 类型的实例)所需的内存?

java - 附加到 HTML 内容时如何保持 SWT 浏览器小部件的底部可见?

java - 为什么这个基本的 JavaFX 程序无法启动?

java - GUI 未动态更新

Java删除转义双引号

java - 在 JTextPane 中,如何更改输入元素的 value 属性?

java - 如何从自定义JButton拦截paintComponent

.net - 如何使用异步方法加载数据库数据并保持 UI 响应

java - 从 Eclipse 和命令行运行时,BufferedImage 字节具有不同的字节顺序