Нет лучшего способа узнать что-то новое, чем просто начать играть с ним. Не лучшее время, чем сразу после первого релиза ( вчера ). Выбрав шины Pivot, я начал с чтения существующих ресурсов на Javalobby:
- Интервью: Грег Браун и Тодд Волкерт из Pivot Framework
- Pivot: практический пример, часть 1 — разметка пользовательского интерфейса с использованием WTKX
- Pivot: практический пример, часть 2 — обработка событий
- Pivot: практический пример, часть 3 — веб-запросы
- Pivot: практический пример, часть 4 — привязка данных
- Pivot: практический пример, часть 5 — локализация
Затем я взломал скромный сценарий Hello World от Pivot. Вот код:
package pivot.tutorials;
import pivot.collections.Dictionary;
import pivot.wtk.Application;
import pivot.wtk.Component;
import pivot.wtk.Display;
import pivot.wtk.Window;
import pivot.wtkx.WTKXSerializer;
public class HelloJava implements Application {
private Window window = null;
public void startup(Display display, Dictionary<String, String> properties) throws Exception {
WTKXSerializer wtkxSerializer = new WTKXSerializer();
Component content = (Component) wtkxSerializer.readObject("pivot/tutorials/hello.wtkx");
window = new Window();
window.setContent(content);
window.setMaximized(true);
window.open(display);
}
public boolean shutdown(boolean optional) {
window.close();
return true;
}
public void suspend() {
}
public void resume() {
}
}
Здесь стоит отметить тот факт, что у нас есть класс приложения, предоставленный pivot.wtk.Application. Понятно, что этот класс обрабатывает жизненный цикл нашего приложения. Это именно то, что можно ожидать от структуры. У нас также есть объект Window с множеством интересных методов:
Обратите внимание, как файл упоминается в строке 16 выше. Вот как выглядит этот файл:
<?xml version="1.0" encoding="UTF-8"?>
<Label text="Hello WTKX!" styles=
"{font:'Arial bold 24', color:'#ff0000', horizontalAlignment:'center', verticalAlignment:'center'}"
xmlns:wtkx="http://pivot.dev.java.net/wtkx/2008" xmlns="pivot.wtk"/>
«Подожди минуту!» Теперь вы должны подумать, если вы смотрите на все это в первый раз. «Вы определяете компонент пользовательского интерфейса в файле XML?» Да, это именно то, что здесь происходит. Забудь о Swing, забудь о SWT. Pivot — это серьезно радикальный фреймворк — типичный фреймворк менее дерзок, чем этот, потому что обычно фреймворк предлагает инновации на уровне приложений. Pivot тоже это делает. Но, по сути, Pivot предлагает инновации на уровне виджетов, то есть целый новый инструментарий, в том же пространстве, что и Swing и SWT.
Ниже приведено представление среды IDE, сначала в IntelliJ, а затем в среде IDE NetBeans, в котором показаны два вышеупомянутых файла вместе с необходимыми JAR-файлами Pivot:
Не все эти JAR-файлы требуются для этого простого образца, но это все JAR-файлы, которые понадобятся во всех случаях, поскольку эти JAR-файлы составляют весь дистрибутив Pivot. В последнем случае, т. Е. В среде IDE NetBeans, я использовал этот сценарий Ant для запуска приложения:
<target name="run" depends="jar">
<property file="nbproject/project.properties" />
<java classpath="${run.classpath}" classname="pivot.wtk.DesktopApplicationContext">
<arg value="pivot.tutorials.HelloJava"/>
</java>
</target>
Здорово. Затем запустите приложение, и вы получите такой простой результат:
ХОРОШО. Теперь давайте немного углубимся и посмотрим на один из классных сэмплов, который поставляется с дистрибутивом:
Для этого наше приложение имеет следующую структуру:
Вот содержание ‘refle.wtkx’:
<?xml version="1.0" encoding="UTF-8"?>
<ImageView image="@IMG_0767_2.jpg"
xmlns:wtkx="http://pivot.dev.java.net/wtkx/2008" xmlns="pivot.wtk"/>
И вот «translucent.wtkx»:
<?xml version="1.0" encoding="UTF-8"?>
<FlowPane orientation="vertical" styles="{horizontalAlignment:'justify'}"
xmlns:wtkx="http://pivot.dev.java.net/wtkx/2008" xmlns="pivot.wtk">
<Label text="A Translucent Window"/>
<Border styles="{color:13, padding:0}">
<content>
<ListView listData="['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']"/>
</content>
</Border>
</FlowPane>
Наконец, вот исходный файл Java:
package pivot.tutorials;
import pivot.collections.Dictionary;
import pivot.wtk.Application;
import pivot.wtk.Component;
import pivot.wtk.ComponentMouseListener;
import pivot.wtk.Display;
import pivot.wtk.Frame;
import pivot.wtk.Window;
import pivot.wtk.effects.FadeDecorator;
import pivot.wtk.effects.ReflectionDecorator;
import pivot.wtkx.WTKXSerializer;
public class DecoratorDemo implements Application {
private Window reflectionWindow = null;
private Frame fadeFrame = null;
public void startup(Display display, Dictionary<String, String> properties)
throws Exception {
WTKXSerializer wtkxSerializer = new WTKXSerializer();
reflectionWindow =
new Window((Component)wtkxSerializer.readObject(
getClass().getResource("reflection.wtkx")));
reflectionWindow.setTitle("Reflection Window");
reflectionWindow.getDecorators().add(new ReflectionDecorator());
reflectionWindow.setLocation(20, 20);
reflectionWindow.open(display);
fadeFrame =
new Frame((Component)wtkxSerializer.readObject(
getClass().getResource("translucent.wtkx")));
fadeFrame.setTitle("Translucent Window");
final FadeDecorator fadeDecorator = new FadeDecorator();
fadeFrame.getDecorators().update(0, fadeDecorator);
fadeFrame.getComponentMouseListeners().add(new ComponentMouseListener() {
public boolean mouseMove(Component component, int x, int y) {
return false;
}
public void mouseOver(Component component) {
fadeDecorator.setOpacity(0.9f);
component.repaint();
}
public void mouseOut(Component component) {
fadeDecorator.setOpacity(0.5f);
component.repaint();
}
});
fadeFrame.setLocation(80, 80);
fadeFrame.open(display);
}
public boolean shutdown(boolean optional) {
reflectionWindow.close();
fadeFrame.close();
return true;
}
public void suspend() {
}
public void resume() {
}
}
Теперь, учитывая все вышесказанное, вот уникальные возможности Pivot:
- Пользовательский интерфейс может быть (но не обязательно!) Выполнен в XML. Нажмите здесь для получения дополнительной информации .
- Вся логика выполнена в Java, поэтому существует четкое разграничение / разделение между пользовательским интерфейсом и логикой. Нажмите здесь для получения дополнительной информации .
- Есть несколько ключевых болевых точек, которые Pivot пытается решить, в дополнение к указанным выше областям дизайна / композиции пользовательского интерфейса. Они направлены на облегчение взаимодействия с современными технологиями, такими как JSON и REST. Во-первых, веб-запросы ; во-вторых, привязка данных ; (было бы интересно сравнить, как это делается с подходом Groovy / Griffon); в-третьих, локализация .
Самая большая вещь, к которой нужно привыкнуть, в этом контексте — это разметка XML (которая, опять же, является необязательной). Но я предполагаю, что некоторые интересные вещи вытекают из использования этого подхода вместо Java. Например, нет необходимости перекомпилировать при внесении изменений в пользовательский интерфейс. Потенциально, генераторы пользовательского интерфейса также могут быть проще реализовать, если на выходе будет простой XML, а не исходный код. Наконец, прежде чем погрузиться в себя, я рекомендую прочитать интервью с Грегом и Тоддом , создателями Pivot, а затем взглянуть на отличную документацию, доступную здесь, в Интернете , особенно на учебник .