这是我的示例代码。我正在尝试将没有标题栏显示的JInternalFrame
嵌入JFrame
。
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameUI;
class A{
public void doThis(){
JFrame fr = new JFrame();
fr.setSize(300,300);
JInternalFrame f = new JInternalFrame();
f.setSize(200,200);
BasicInternalFrameUI ui = (BasicInternalFrameUI) f.getUI();
ui.setNorthPane(null);
f.setVisible(true);
fr.add(f);
fr.setVisible(true);
}
}
class MainA{
public static void main(String a[]){
A obj = new A();
obj.doThis();
}
}
代码正常工作,并根据要求在JInternalFrame
的{{1}}内显示JFrame
,如下所示。
我仍然运行此UI,同时当我尝试更改我的XP主题(通过属性>>外观>>主题)时,UI会自动重新绘制自己以显示JInternalFrame
标题栏再如下图所示。
我无法理解这种奇怪的行为。如果这是Java Swing的一个问题,或者它是与操作系统相关的东西,我不知道。请在这件事上给予我帮助!
当我明确编写titleBar设置为null时,为什么在主题更改时UI重新绘制并启用标题栏?
PS:使用的操作系统是Windows XP,我不确定在Linux或其他版本的Windows中是否观察到相同的行为
答案 0 :(得分:2)
'do'是Java中的关键字,因此代码不能为我编译。这段代码可以。
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameUI;
class A{
public void doIt(){
JFrame fr = new JFrame();
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(300,300);
JInternalFrame f = new JInternalFrame();
f.setSize(200,200);
fr.add(f);
BasicInternalFrameUI ui = (BasicInternalFrameUI) f.getUI();
ui.setNorthPane(null);
f.setVisible(true);
fr.setVisible(true);
}
public static void main(String a[]){
A obj = new A();
obj.doIt();
}
}
一些注释/问题:
JInternalFrame
直接添加到JDesktopPane
以外的任何内容?JInternalFrame
的大小调整存在轻微问题。我怀疑它与代码中缺少validate()
/ pack()
有关。由于这不是问题所在,我无法进一步调查它。我在这里使用Windows 7获得了'null结果'。JInternalFrame
的标题栏在更改时(按顺序)没有重新出现: