为浮动的 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
的内部floatingX
和floatingY
变量( Point
参数根本没有使用)
else
,将其停靠回 Container
,使用 Point
参数查找停靠位置(北、东...)。
幸运的是,有一种方法可以修改 floatingX
和 floatingY
的值:setFloatingLocation(int x, int y)
.
所以只要在调用setFloating
之前调用这个方法(你可以向它传递一个null
Point
参数,因为它无论如何都不会被使用)。
((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(300, 200);
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);
我想在启动应用程序时为 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
的内部floatingX
和floatingY
变量( Point
参数根本没有使用)
else
,将其停靠回 Container
,使用 Point
参数查找停靠位置(北、东...)。
幸运的是,有一种方法可以修改 floatingX
和 floatingY
的值:setFloatingLocation(int x, int y)
.
所以只要在调用setFloating
之前调用这个方法(你可以向它传递一个null
Point
参数,因为它无论如何都不会被使用)。
((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(300, 200);
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);