Как отобразить кнопку в Nifty GUI без XML?

Я пытаюсь сделать графический интерфейс для своей игры. Я пробовал разные библиотеки и остановился на Nifty. Я не нашел ни одного полезного учебника, и поэтому я учусь на примерах кода.

Я хочу отобразить простой Button, но мой код не работает. Я попытался установить цвет фона Panel, который работал. Я понятия не имею, почему Button не отображается.

Вот что у меня есть:

protected void prepareNifty(Nifty nifty) {
    ScreenBuilder sb = new ScreenBuilder("start");
    LayerBuilder lb = new LayerBuilder();
    PanelBuilder pb = new PanelBuilder();

    pb.control(new ButtonBuilder("btn1", "First Button!"){{
        alignCenter();
        valignCenter();
        height("5%");
        width("15%");
        backgroundColor(Color.WHITE);
    }});

    pb.childLayoutCenter();
    lb.childLayoutVertical();
    lb.panel(pb);
    sb.layer(lb);

    nifty.addScreen("start", sb.build(nifty));
}

Я должен добавить, что я использую Slick2D, и мой класс расширяет NiftyBasicGame.

Как я могу отобразить Button и установить его абсолютную позицию?


person Genhis    schedule 29.07.2015    source источник


Ответы (1)


Вам также потребуется загрузить элементы управления и стили, если вы хотите использовать элементы управления по умолчанию, например элемент управления Button.

Попробуйте что-то вроде:

nifty.loadStyleFile("nifty-default-styles.xml");
nifty.loadControlFile("nifty-default-controls.xml");

new ScreenBuilder("start") {{
  layer(new LayerBuilder("background") {{
    backgroundColor("#f008");
    childLayoutAbsolute();
    control(new ButtonBuilder("showPopupButton", "SHOW") {{
      x(SizeValue.px(100));
      y(SizeValue.px(100));
      interactOnClick("showPopup()");
    }});
  }});
}}.build(nifty);
nifty.gotoScreen("start");

Кроме того, полезно прочитать nifty-gui-the-manual-1.3.2.pdf

person void256    schedule 29.07.2015
comment
Спасибо, я забыл загрузить элементы управления. Нужно ли загружать стили? Например, если я хочу установить только белый фон и ничего больше, как я делаю в своем вопросе. - person Genhis; 30.07.2015
comment
Да, вам также понадобятся стили. Без стилей нет кнопки :) - person void256; 30.07.2015