1

创建按钮或按钮组很容易,

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

但是,我不知道如何在不同的组中创建两个按钮,即左上角的一个按钮和右上角的按钮...

我尝试创建了两个根,一个按钮将被禁用/不可点击。如果我创建一个根,它们将组合在一起:(

============ 感谢 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);

它产生这个屏幕(即,它都是居中的,而不是左上/下...) 在此处输入图像描述

第二个,完整代码如下: 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 回答