Установка определенного местоположения для плавающего 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);
}
Спасибо
2 ответа
Из исходного кода setFloating(логическое, Point), Point
Параметр используется только в случае false
первый параметр, и используется, чтобы найти место, чтобы закрепить панель инструментов в исходном Container
,
В принципе, floating
будучи логическим параметром, он выглядит так:
if(floating)
, отсоедините панель инструментов и поместите ее в Window
какое местоположение соответствует внутреннему floatingX
а также floatingY
переменные BasicToolBarUI
(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);
Чтобы дать панели инструментов абсолютный макет, сначала вы должны установить макет в null, как это: frame.setLayout(null);
Тогда вместо ((BasicToolBarUI) toolbar.getUI()).setFloating(true, new Point(300, 200));
Вы можете просто использовать toolBar.setBounds(x,y, width, height);
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);
}