Java 装饰,非装饰的金门框架
我想得到一些关于如何拆开和装饰后镜框的帮助。我的框架类是:Java 装饰,非装饰的金门框架,java,jinternalframe,Java,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;
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.setUndercorated(false)再次装饰框架时代码>
JInternalFrame的NorthPane
将被填充,但JInternalFrame的NorthPane
将不会被填充
关于如何解决这个问题,有什么建议吗?如下所述:
框架可能会关闭其原生装饰(即框架和标题栏),并设置未装饰。这只能在框架不可显示时进行
我猜你是想在以下情况下改变它:
将组件添加到可显示的包含层次结构或将其包含层次结构设置为可显示时,组件将被设置为可显示。当一个包含层次结构的上级窗口被压缩或可见时,它就可以显示
当组件从可显示的包含层次结构中删除或其包含层次结构设置为不可显示时,组件将设置为不可显示。当释放其祖先窗口时,包含层次结构将变得不可显示
好的,我在这里找到了一个解决方案:。
所以在我的代码中我添加了
public void setRootPaneCheckingEnabled(boolean enabled)
{
super.setRootPaneCheckingEnabled(enabled);
}
并将我的SetUnderatted方法更改为:
public void setUndecorated(boolean val)
{
setBorder(val ? null : border);
setRootPaneCheckingEnabled(false);
((BasicInternalFrameUI) getUI()).setNorthPane(val ? null : northPane);
setRootPaneCheckingEnabled(true);
}
现在我的代码工作得很完美