如何在面板的其余组件上绘制停靠的JToolBar

时间:2017-02-27 16:26:04

标签: java swing jtoolbar

有没有办法在现有面板的其余组件上绘制停靠的JToolBar?

基本上我想要,当对接工具栏(从浮动位置)时,不要干扰我的其他组件和现有布局。

简单的例子,只是为了开始......

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

1 个答案:

答案 0 :(得分:3)

您可以将工具栏直接添加到JFrame的{​​{3}}。

以下是一些有用的文档:JLayeredPane

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);
}