1

Is there any way to paint a docked JToolBar OVER the rest of the components from an existing panel?

Basically I want, when docking the toolbar (from a floating position), not to interfere with my other components and existing layout.

simple example, just to get started..

public class ToolBarSample {

 public static void main(final String args[]) {
    JFrame frame = new JFrame("JToolBar Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JToolBar toolbar = new JToolBar();

    toolbar.add(new JButton("button"));
    toolbar.add(new JButton("button 2"));

    Container contentPane = frame.getContentPane();
    contentPane.add(toolbar, BorderLayout.NORTH);
    contentPane.add(new JLabel("I want this to be under the toolbar"), BorderLayout.CENTER);

    // set the toolbar floating
    ((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(10, 10);
    ((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);

    // TODO - after application starts, manually dock the toolbar to any position (north/east...)

    frame.setSize(250, 100);
    frame.setVisible(true);
 }
}

enter image description here

mKorbel
  • 109,525
  • 20
  • 134
  • 319
Marius Manastireanu
  • 2,461
  • 5
  • 19
  • 29

1 Answers1

3

You may add the toolbar directly to the JLayeredPane of the JFrame .

Here is some useful documentation : How to Use Layered Panes

public static void main(final String args[]) {
    JFrame frame = new JFrame("JToolBar Example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JToolBar toolbar = new JToolBar();

    toolbar.add(new JButton("button"));
    toolbar.add(new JButton("button 2"));

    Container contentPane = frame.getContentPane();
    //contentPane.add(toolbar, BorderLayout.NORTH);
    contentPane.add(new JLabel("I want this to be under the toolbar"), BorderLayout.CENTER);

    JLayeredPane layeredPane = frame.getLayeredPane();
    layeredPane.setLayout(new BorderLayout());
    layeredPane.add(toolbar, BorderLayout.NORTH);

    // set the toolbar floating
    ((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(10, 10);
    ((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);

    // TODO - after application starts, manually dock the toolbar to any position (north/east...)

    frame.setSize(250, 100);
    frame.setVisible(true);
}
Arnaud
  • 17,229
  • 3
  • 31
  • 44