在MacOS上未装饰JInternalFrame

时间:2009-07-04 17:13:09

标签: java swing macos

我正在尝试取消设计JInternalFrame,即使用以下代码删除默认标题栏;

BasicInternalFrameUI ui = (BasicInternalFrameUI)internalFrame.getUI();
ui.getNorthPane().setPrefrredSize(new Dimension(0,0));

我在Windows上工作,但第二行在MacOS上抛出NullPointerException

任何想法为什么以及如何绕过它?

2 个答案:

答案 0 :(得分:0)

我不使用Mac,所以我不知道导致问题的原因。

没有标题栏的JInternalFrame失去了被拖动的能力。只需将JPanel添加到桌面,您就可以实现相同的目标。您需要设置面板​​的边界。您可能还想在面板上使用其中一个内部框架自定义边框:

UIManager.getBorder("InternalFrame.paletteBorder");
UIManager.getBorder("InternalFrame.optionDialogBorder");

或许可以使用另一种选择:

internalFrame.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);

这将用一个小调色板替换标题栏,可用于拖动内部框架而不使用按钮或标题。

答案 1 :(得分:0)

在Mac上,JInternalFrame没有北窗格。仅在非Mac OS平台上执行代码;

// only remove the northpanel for none Mac OS
if(!(System.getProperty("os.name").startsWith("Mac OS"))){
    BasicInternalFrameUI ui = (BasicInternalFrameUI) getUI();
    ui.getNorthPane().setPrefrredSize(new Dimension(0,0));
}

关于跨平台的事情: - (