1

ボタンまたはボタングループを簡単に作成できます。

    Root root = iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer).
            setStyles(make(VALIGN.top, HALIGN.right)).
            setBounds(0, 0, width, height).
            add(backButton);

しかし、異なるグループに 2 つのボタンを作成する方法がわかりませんでした。

2 つのルートを作成しようとしましたが、1 つのボタンが無効/クリック不可になります。1 つのルートをクレートすると、それらは一緒にグループ化されます :(

============ 詳細な回答をしてくれた samskivert に感謝しますが、正しい結果を得ることができません。「元の」回答の最初の提案については、以下の完全なコード:

    Font SMALL = PlayN.graphics().createFont("Helvetica", Font.Style.PLAIN, 24);
    final Stylesheet ROOT = SimpleStyles.newSheetBuilder().
            add(Element.class, make(FONT.is(SMALL))).
            add(Button.class, make(BACKGROUND.is(Background.solid(100)))).create();

    Group group = new Group(AxisLayout.vertical()).add(
            new Group(AxisLayout.horizontal(), Style.HALIGN.left).add(
                    new Button("Upper left")),
            AxisLayout.stretch(new Shim(1, 1)),
            new Group(AxisLayout.horizontal(), Style.HALIGN.right).add(
                    new Button("Lower right")));

    iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer)
            .setBounds(0, 0, 960, 640)
            .add(group);

この画面を生成します(つまり、左上/下ではなく、すべて中央に表示されます...) ここに画像の説明を入力

2 番目の完全なコードは次のとおりです。 Font SMALL = PlayN.graphics().createFont("Helvetica", Font.Style.PLAIN, 24);

    final Stylesheet ROOT = SimpleStyles.newSheetBuilder().
            add(Element.class, make(FONT.is(SMALL))).
            add(Button.class, make(BACKGROUND.is(Background.solid(100)))).create();

    Group group = new Group(new BorderLayout()).add(
      new Group(AxisLayout.horizontal(), Style.HALIGN.left).
        setConstraint(BorderLayout.NORTH).add(
              new Button("Upper left")),
      new Group(AxisLayout.vertical(), Style.HALIGN.right).
        setConstraint(BorderLayout.SOUTH).add(
              new Button("Lower right")));

    iface.createRoot(AxisLayout.vertical(), ROOT, modeLayer)
            .setBounds(0, 0, 960, 640)
            .add(group);

このスクリーンショットが生成されます(つまり、中央に配置され、重なっています...) ここに画像の説明を入力

再度、感謝します。

4

1 に答える 1

1

編集:おっと、左上と右下ではなく、左上と右上が必要なことがわかりました。必要な構成はさらに簡単です。ボタンの間に伸ばしたシムを差し込むだけです:

iface.createRoot(AxisLayout.vertical().offStretch(), ROOT, modeLayer).
  setBounds(0, 0, width, height).
  add(new Group(AxisLayout.horizontal()).add(
    new Button("Upper-left"),
    AxisLayout.stretch(new Shim(1, 1)),
    new Button("Upper-right")));

元の回答:

AxisLayoutは、そのすべての要素を(水平または垂直)線でレイアウトします。それらはすべて互いに隣接している必要があり、その間に構成可能なギャップがあります。AxisLayoutを使用して目的のレイアウトを実現する場合は、次のようにネストされたグループを使用する必要があります。

+---------------------------------------+
|+-------------------------------------+|
|| [Button]    left-aligned AxisLayout ||
|+-------------------------------------+|
|                                       |
|        [stretched shim widget]        |  <-- vertical AxisLayout
|                                       |
|+-------------------------------------+|
|| right-aligned AxisLayout   [Button] ||
|+-------------------------------------+|
+---------------------------------------+

コードでは、次のようになります。

Group group = new Group(AxisLayout.vertical()).add(
  new Group(AxisLayout.horizontal(), Style.HALIGN.left).add(
    new Button("Upper left")),
  AxisLayout.stretch(new Shim(1, 1)),
  new Group(AxisLayout.horizontal(), Style.HALIGN.right).add(
    new Button("Lower right")));

BorderLayoutを使用して、中央のシムを回避することもできます。

Group group = new Group(new BorderLayout()).add(
  new Group(AxisLayout().horizontal(), Style.HALIGN.left).
    setConstraint(BorderLayout.NORTH).add(
      new Button("Upper left")),
  new Group(AxisLayout.vertical(), Style.HALIGN.right).
    setConstraint(BorderLayout.SOUTH).add(
      new Button("Lower right")));
于 2012-05-26T19:49:10.797 に答える