• 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

概要

アプリケーションを起動した時、JToolBarが指定した位置にフローティング状態で配置されるように設定します。

サンプルコード

 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);
  }
});
View in GitHub: Java, Kotlin

解説

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

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

参考リンク

コメント