I found some code online, I edited it a bit. I want to hide title bar of a JInternalFrame.
JInternalFrame开发者_运维问答 frame = new JInternalFrame();
// Get the title bar and set it to null
setRootPaneCheckingEnabled(false);
javax.swing.plaf.InternalFrameUI ifu= frame.getUI();
((javax.swing.plaf.basic.BasicInternalFrameUI)ifu).setNorthPane(null);
frame.setLocation(i*50+10, i*50+10);
frame.setSize(200, 150);
//frame.setBackground(Color.white);
frame.setVisible(true);
desktop.add(frame);
The problem is that the title bar isn't being hidden for some reason. Thanks.
I solved this problem this way: I subclass JInternalFrame and add the following code to its constructor. (I get the subclassing for free because I use netBeans' GUI Builder)
((javax.swing.plaf.basic.BasicInternalFrameUI)this.getUI()).setNorthPane(null);
in your case I think
First convert the internalframe to basicinternalframe.
do it like this:-
BasicInternalFrameUI bi = (BasicInternalFrameUI)your_internalframe_object.getUI();
bi.setNorthPane(null);
After this your title bar will be invisible.
What the others say. Depending on the framework the ui might get updated though, which will make it reappear. So for me it worked initializing the JInternalFrame like this:
JInternalFrame internalFrame = new JInternalFrame() {
@Override
public void setUI(InternalFrameUI ui) {
super.setUI(ui); // this gets called internally when updating the ui and makes the northPane reappear
BasicInternalFrameUI frameUI = (BasicInternalFrameUI) getUI(); // so...
if (frameUI != null) frameUI.setNorthPane(null); // lets get rid of it
}
};
for me this works very well:
putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
getRootPane().setWindowDecorationStyle(JRootPane.NONE);
((BasicInternalFrameUI) this.getUI()).setNorthPane(null);
this.setBorder(null);
thanks.
精彩评论