hiding title bar of JInternalFrame? -java
Asked Answered
W

4

10

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.

Wrens answered 28/8, 2011 at 2:4 Comment(0)
B
16

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

Boxwood answered 5/4, 2014 at 23:1 Comment(3)
Nice, this is the correct answer, unlike .setUI(null)! I also read somewhere that you might need to do this again after certain events (like minimizing the window)Aroid
This is the correct answer. It is also useful when combined with frame.setBorder(null); to use a JInternalFrame as a solo component within a top-level JFrame as if it were a JPanel.Remembrancer
Worked for me. I wasn't even going to try, but works like charm. Thank you.Melessa
M
15

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.

Motley answered 3/6, 2013 at 7:11 Comment(0)
O
2

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
           }
        };
Olmos answered 9/7, 2018 at 21:5 Comment(0)
S
0

for me this works very well:

    putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
    getRootPane().setWindowDecorationStyle(JRootPane.NONE);
    ((BasicInternalFrameUI) this.getUI()).setNorthPane(null);
    this.setBorder(null);

thanks.

Stoltz answered 12/6, 2016 at 1:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.