Установка определенного местоположения для плавающего 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 (которому вы можете передать nullPoint параметр, так как он все равно не будет использоваться).

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

}

Другие вопросы по тегам