我想在启动应用程序时将特定位置设置为 JToolBar。有没有办法在屏幕上的特定点上设置 JToolBar 的浮动位置?
我以这段代码为例,它将创建一个工具栏并尝试将其设置为浮动在 Point(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);
}
谢谢
从 setFloating(布尔值,点)的源代码来看,Point
参数仅在第一个参数false
的情况下使用,用于查找将工具栏停靠到其原始Container
的位置。
基本上,floating
布尔参数,它是这样的:
if(floating)
,取消对接工具栏并将其放在一个Window
中,该位置对应于BasicToolBarUI
的内部floatingX
和floatingY
变量(根本不使用Point
参数)
else
,使用Point
参数将其停靠回Container
,找到停靠它的位置(北,东...
幸运的是,存在一种修改 floatingX
和 floatingY
值的方法:setFloatingLocation(int x, int y)
。
因此,只需在调用setFloating
之前调用此方法(您可以向其传递一个null
Point
参数,因为它无论如何都不会被使用)。
((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(300, 200);
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);
要首先为工具栏提供绝对布局,您必须将布局设置为 null,如下所示: frame.setLayout(null);
然后
toolBar.setBounds(x,y, width, height);
而不是((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);
}