---
category: swing
folder: FloatingToolBarStartingLocation
title: JToolBarが起動時に指定した位置でフローティング状態になるよう設定する
tags: [JToolBar, Window]
author: aterai
pubdate: 2017-01-23T00:05:35+09:00
description: アプリケーションを起動した時、JToolBarが指定した位置にフローティング状態で配置されるように設定します。
image: https://drive.google.com/uc?id=1PLQTp9ryyxO5K8UZUj2gL_nn_wp4x66XQA
---
* 概要 [#summary]
アプリケーションを起動した時、`JToolBar`が指定した位置にフローティング状態で配置されるように設定します。

#download(https://drive.google.com/uc?id=1PLQTp9ryyxO5K8UZUj2gL_nn_wp4x66XQA)

* サンプルコード [#sourcecode]
#code(link){{
 EventQueue.invokeLater(() -> {
EventQueue.invokeLater(() -> {
  Container w = getTopLevelAncestor();
  if (w instanceof Window) {
    Point pt = ((Window) w).getLocation();
    BasicToolBarUI ui = (BasicToolBarUI) toolbar.getUI();
    ui.setFloatingLocation(pt.x + 120, pt.y + 160);
    ui.setFloating(true, null);
  }
});
}}

* 解説 [#explanation]
上記のサンプルでは、アプリケーションを起動した時点で`JToolBar`がフローティング状態になるように設定し、その表示位置を指定しています。

- `BasicToolBarUI#setFloating(boolean, Point)`メソッドの引数`Point`は、引数`boolean`が`false`の場合のみ`BorderLayout`の東西南北どの位置にドックするかを調査するために使用される
-- 参考: [https://stackoverflow.com/questions/41701664/setting-a-specific-location-for-a-floating-jtoolbar java - Setting a specific location for a floating JToolBar - Stack Overflow]
-- `true`でフローティング状態に移行する場合、引数`Point`は使用されないので何を指定しても無効
-- このため、`JToolBar`をフローティング状態に移行する前に`BasicToolBarUI#setFloatingLocation(...)`でその位置を指定しておく必要がある
-- このため`JToolBar`をフローティング状態に移行する前に`BasicToolBarUI#setFloatingLocation(...)`でその位置を指定しておく必要がある
- フローティング状態の`JToolBar`から親`Window`を取得し、直接`Window#setLocation(...)`でその位置を指定する方法もある

#code{{
// ドッキング元のメインWindow
Window w = (Window) getTopLevelAncestor();
Point pt = w.getLocation();
// フローティング状態に移行
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null);
// JToolBar(フローティング状態)のWindow
Container c = toolbar.getTopLevelAncestor();
if (c instanceof Window) {
  ((Window) c).setLocation(pt.x + 120, pt.y + 160);
}
}}

* 参考リンク [#reference]
- [https://stackoverflow.com/questions/41701664/setting-a-specific-location-for-a-floating-jtoolbar java - Setting a specific location for a floating JToolBar - Stack Overflow]
- [[JToolBarをドラッグによる移動は可能だが分離は不可に設定する>Swing/NonDetachableToolBar]]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/plaf/basic/BasicToolBarUI.html#setFloatingLocation-int-int- BasicToolBarUI#setFloatingLocation(...) (Java Platform SE 8)]
-- 現在の`BasicToolBarUI#setFloatingLocation(...)`や`setFloating(...)`のドキュメントは空なので、詳細が知りたい場合は、ソースコードを参照する必要がある

* コメント [#comment]
#comment
#comment