• category: swing folder: ComponentZOrder title: JPanelに追加したコンポーネントの順序を変更する tags: [JPanel, LayoutManager, GridLayout, GridBagLayout] author: aterai pubdate: 2019-02-11T21:46:54+09:00 description: JPanel内のコンポーネントのZ軸順インデックスを変更してその表示順序を変更します。 image: https://drive.google.com/uc?export=view&id=1mSe3NrxaEpAwsdupzRCA_Uv1RY8aaMXf5Q

概要

JPanel内のコンポーネントのZ軸順インデックスを変更してその表示順序を変更します。

サンプルコード

button.addActionListener(e -> {
  p.setComponentZOrder(p.getComponent(p.getComponentCount() - 1), 0);
  p.revalidate();
});
View in GitHub: Java, Kotlin

解説

  • GridLayoutを設定したJPanelに配置したZ軸順インデックスを変更
    • GridLayoutJPanelComponentOrientationLEFT_TO_RIGHTの場合、Z軸順インデックスで左から右にコンポーネントを配置、表示する
      • FlowLayoutBoxLayoutなども同様
  • GridBagLayoutを設定したJPanelに配置したZ軸順インデックスを変更
    • GridBagConstraints.gridxGridBagConstraints.gridyのような位置に関する制約が指定されていない(デフォルトのGridBagConstraints.RELATIVEの状態)場合、GridBagLayoutZ軸順インデックスで左から右にコンポーネントを配置、表示する
      • 例えばc.gridx = 0;などの制約が設定されている場合、setComponentZOrder(...)メソッドでZ軸順インデックスを変更しても表示位置は変化しない
      • BorderLayoutのようにBorderLayout.NORTHなどのレイアウト制約を設定してコンポーネントを配置している場合も同様にZ軸順インデックスを変更しても表示位置は変化しない

参考リンク

コメント