gpt4 book ai didi

java - 装饰、取消装饰 JInternalFrame

转载 作者:行者123 更新时间:2023-11-30 08:57:10 25 4
gpt4 key购买 nike

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

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);
}
}

然后我使用:

InternalFrame frame = new InternalFrame("My Internal Frame");
desktop.add(frame);
frame.setVisible(true);
frame.setUndecorated(true);

到目前为止一切正常,JInternalFrame 变得像我想要的那样未修饰。然后问题是当我想用 frame.setUndecorated(false); 再次装饰框架时Border 将被填充,但 JInternalFrameNorthPane 不会。

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

最佳答案

好的,我在这里找到了解决方案:https://community.oracle.com/thread/1493647 .所以在我的代码中我添加了

public void setRootPaneCheckingEnabled(boolean enabled)
{
super.setRootPaneCheckingEnabled(enabled);
}

并将我的 setUndecorated 方法更改为:

public void setUndecorated(boolean val)
{
setBorder(val ? null : border);

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

现在我的代码工作完美了。

关于java - 装饰、取消装饰 JInternalFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com