为浮动的 JToolBar 设置特定位置

Setting a specific location for a floating JToolBar

我想在启动应用程序时为 JToolBar 设置一个特定位置。 有什么方法可以设置 JToolBar 在屏幕上特定点上的浮动位置吗?

我以这段代码为例,它将创建一个工具栏并尝试将其设置为浮动在点 (300,200) 处,但它却显示(浮动)在位置 (0,0)。

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

    JToolBar toolbar = new JToolBar();
    toolbar.add(new JButton("button 1"));
    toolbar.add(new JButton("button 2"));

    Container contentPane = frame.getContentPane();
    contentPane.add(toolbar, BorderLayout.NORTH);

    ((BasicToolBarUI) toolbar.getUI()).setFloating(true, new Point(300, 200));

    frame.setSize(350, 150);
    frame.setVisible(true);
}

谢谢

首先要为工具栏提供绝对布局,您必须像这样将布局设置为空:frame.setLayout(null); 然后您可以使用 toolBar.setBounds(x,y, width, height);[=14= 而不是 ((BasicToolBarUI) toolbar.getUI()).setFloating(true, new Point(300, 200)); ]

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JToolBar toolbar = new JToolBar();
toolbar.add(new JButton("button 1"));
toolbar.add(new JButton("button 2"));

Container contentPane = frame.getContentPane();
contentPane.add(toolbar, BorderLayout.NORTH);

toolBar.setBounds(100,100,50,50);

frame.setSize(350, 150);
frame.setVisible(true);

}

setFloating(boolean, Point)的源代码来看,Point参数仅在第一个参数false的情况下使用,用于查找工具栏停靠的位置原来的 Container.

基本上,floating 是布尔参数,就像:

if(floating),取消停靠工具栏并将其放在Window中,该位置对应BasicToolBarUI的内部floatingXfloatingY变量( Point 参数根本没有使用)

else,将其停靠回 Container,使用 Point 参数查找停靠位置(北、东...)。

幸运的是,有一种方法可以修改 floatingXfloatingY 的值:setFloatingLocation(int x, int y).

所以只要在调用setFloating之前调用这个方法(你可以向它传递一个null Point参数,因为它无论如何都不会被使用)。

((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(300, 200);
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);