Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Статьи
        Интерфейс
            NiftyGui без XML

NiftyGui без XML

Опубликованно: 19.09.2015, 7:32
Последняя редакция, AdiDOS: 07.05.2017 0:11

В прошлом уроке мы научились создавать GUI приложение с помощью XML файла , а так же добавили панель с текстом , в этом уроке мы будем дела тоже самое но без использования XML файла , а точней мы все создавать будем  с помощью классов и методов java.

package test;

import com.jme3.app.SimpleApplication;
import com.jme3.niftygui.NiftyJmeDisplay;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.builder.ElementBuilder.Align;
import de.lessvoid.nifty.builder.ElementBuilder.VAlign;
import de.lessvoid.nifty.builder.LayerBuilder;
import de.lessvoid.nifty.builder.PanelBuilder;
import de.lessvoid.nifty.builder.ScreenBuilder;
import de.lessvoid.nifty.builder.TextBuilder;
import de.lessvoid.nifty.screen.DefaultScreenController;
import de.lessvoid.nifty.tools.Color;

public class NiftyGuiWoutXML extends SimpleApplication {

 public static void main(String[] args) {
   NiftyGuiWoutXML app = new NiftyGuiWoutXML();
   app.setPauseOnLostFocus(false);
   app.start();
 }

 @Override
 public void simpleInitApp() {
   flyCam.setEnabled(false);
   NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay(assetManager, inputManager, audioRenderer, guiViewPort);

   Nifty nifty = niftyDisplay.getNifty();
   guiViewPort.addProcessor(niftyDisplay);

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

   ScreenBuilder screen = new ScreenBuilder("screen");
   screen.controller(new DefaultScreenController());

   LayerBuilder layer = createLayer();
   PanelBuilder panel = createPanel();
   TextBuilder text = createText();

   panel.text(text);
   layer.panel(panel);
   screen.layer(layer);

   nifty.addScreen("screen", screen.build(nifty));
   nifty.gotoScreen("screen");
 }
 //Создание слоя
 private LayerBuilder createLayer() {
   LayerBuilder layer = new LayerBuilder("layer");
   layer.childLayoutCenter();
   layer.backgroundColor("#000f");

   return layer;
 }
 //Создание панели
 private PanelBuilder createPanel() {
   PanelBuilder panel = new PanelBuilder("panel");
   panel.width("35%");
   panel.height("25%");
   panel.align(Align.Center);
   panel.valign(VAlign.Center);
   panel.backgroundColor(new Color(0,1,0,1));
   panel.childLayoutCenter();
   panel.visibleToMouse(true);

   return panel;
 }
 //Создание текста
 private TextBuilder createText(){
   TextBuilder text = new TextBuilder("text");
   text.font("aurulent-sans-16.fnt");
   text.color("#000f");
   text.text("Hello from jME3");
   text.align(Align.Center);
   text.valign(VAlign.Center);

   return text;

 }
}

 

Возможно я привык делать по старинке но такой подход как создание GUI приложений с использованием XML файлов мне не очень нравится , да что там говорить мне совсем не нравится , ну конечно если  не было альтернативы то пришлось использовать то что есть , но альтернатива есть и довольно не плохая в реализации , далее перейдем к описанию функций.

 

Установка размещения вложенных компонентов.

childLayoutCenter();
childLayout(ChildLayoutType.Center);

 

Установка цвета фона.

backgroundColor("#000f");
backgroundColor(new Color(0,1,0,1));

 

Ширина и высота в пикселях или в процентах.

width("35%");
height("25%");

 

Выравнивание.

alignCenter();
align(Align.Center);

 

Вертикальное выравнивание.

valignCenter();
valign(VAlign.Center);

 

Установка видимости мыши на компоненте.

visibleToMouse(true);

 

Установка шрифта.

font("aurulent-sans-16.fnt");

 

Установка цвета  , в нашем коде устанавливаем цвет текста.

color("#000f");

 

Установка текста.

text("Hello from jME3");

 

Создание слоя(Layer) входящий параметр в конструкторе идентификатор.

LayerBuilder layer = new LayerBuilder("layer");

 

Создание экрана(Screen) входящий параметр в конструкторе идентификатор.

ScreenBuilder screen = new ScreenBuilder("screen");

 

Создание текста входящий параметр в конструкторе идентификатор.

TextBuilder text = new TextBuilder("text");

 

С помощью метода layer() в Экране мы привязываем подготовленный слой , тоже и касается остальных методов привязываем друг к другу таким порядком , экран > слой > панель > текст.

panel.text(text);
layer.panel(panel);
screen.layer(layer);

 

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

1

Спасибо за внимание!!

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.