首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >装饰,取消装饰JInternalFrame

装饰,取消装饰JInternalFrame
EN

Stack Overflow用户
提问于 2015-02-03 04:05:43
回答 2查看 1.1K关注 0票数 2

我想要一些关于如何取消装饰和装饰一个JInternalFrame的帮助。我的框架类是这样的:

代码语言:javascript
复制
package com;

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JComponent;
import javax.swing.JInternalFrame;
import javax.swing.border.Border;
import javax.swing.plaf.basic.BasicInternalFrameUI;

public class InternalFrame extends JInternalFrame
{
    private static final long serialVersionUID = -1001515635581955601L;

    private Border border;
    private final JComponent northPane;

    public InternalFrame(String name)
    {
        super(name, true, true, true, true);

        border = getBorder();
        northPane = ((BasicInternalFrameUI) getUI()).getNorthPane();

        setName(name);
        setSize(800, 600);
        setLayout(new BorderLayout());
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        setFont(new Font("Lucida Console", Font.PLAIN, 12));
    }

    public void setUndecorated(boolean val)
    {
        setBorder(val ? null : border);
        ((BasicInternalFrameUI) getUI()).setNorthPane(val ? null : northPane);
    }
}

然后我使用:

代码语言:javascript
复制
InternalFrame frame = new InternalFrame("My Internal Frame");
desktop.add(frame);
frame.setVisible(true);
frame.setUndecorated(true);

到目前为止一切都很好,JInternalFrame变得像我想要的那样没有装饰。然后问题是,当我想用frame.setUndecorated(false);装饰框架时,Border会被填充,但NorthPane of frame.setUndecorated(false); JInternalFrame不会。

对如何解决这个问题有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 22:10:04

好吧,我在这里找到了一个解决方案:https://community.oracle.com/thread/1493647。因此在我的代码中我添加了

代码语言:javascript
复制
public void setRootPaneCheckingEnabled(boolean enabled)
{
    super.setRootPaneCheckingEnabled(enabled);
}

并将我的setUndecorated方法更改为:

代码语言:javascript
复制
public void setUndecorated(boolean val)
{
    setBorder(val ? null : border);

    setRootPaneCheckingEnabled(false);
    ((BasicInternalFrameUI) getUI()).setNorthPane(val ? null : northPane);
    setRootPaneCheckingEnabled(true);
}

现在我的代码是完美的。

票数 2
EN

Stack Overflow用户

发布于 2015-02-03 19:03:51

正如documentation所说:

可以使用setUndecorated关闭框架的本机装饰(即框架和标题栏)。只能在帧不可显示时执行此操作。

我猜你是想在它是displayable的时候改变它

当一个组件被添加到一个可显示的容器层次结构中,或者当它的容器层次结构被设置为可显示时,它就被设置为可显示的。当其祖先窗口被打包或可见时,容器层次结构将变为可显示。

当一个组件从一个可显示的容器层次结构中移除时,或者当它的容器层次结构变得不可显示时,该组件就变得不可显示。当释放包含层次结构的祖先窗口时,该层次结构将变为不可显示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28285811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档