无法删除JInternalFrame的边框Nimbus L& F

时间:2016-06-29 21:21:41

标签: java swing jinternalframe nimbus

我已经研究过如何让JInternalFrame只展示没有边框的内容。

删除顶部标题栏: hiding title bar of JInternalFrame? -java

删除周围的边框: how to remove the borders in JInternalFrame?

一切顺利,直到我用Numbus UI测试我的工作,我可以关闭标题栏,但周围的边界卡在那里:

enter image description here

预期结果(适用于其他L& Fs)应为:

enter image description here

我假设有一些与UI相关的设置应该解决它(UIDefaultscomp.putClientProperty());但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:0)

经过反复试验,我找到了一个干净但仍不完整的解决方案。

我所要做的就是将JInternalFrame的用户界面改为其他任何用户界面。 新UI不会进行任何实际渲染,因为我删除了标题栏和边框。

此解决方案不完整,  代码中的任何地方请勿打电话

SwingUtilities.updateComponentTreeUI();

这将导致内部框架重置回默认UI。

修改 最后找到了解决上述重置问题的方法。只是阻止Swing安装除我的自定义UI之外的任何其他内容。

使用JInternalFrame的子类:

@Override
public void updateUI() {
        LookAndFeel laf = UIManager.getLookAndFeel();
        try {
            UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
        } catch (UnsupportedLookAndFeelException e) {
        }

        super.updateUI();

        try {
            UIManager.setLookAndFeel(laf);
        } catch (UnsupportedLookAndFeelException e) {
        }
    }

这实际上忽略了设置UI的任何更改,但我对它不满意。它会重置整个外观,并可能导致可能导致不需要的LaF设置的竞争条件。

我仍然在寻找解决方案,只将此组件设置为Metal。