Как написать полностью настраиваемые виджеты, узнаваемые GWT Designer?
Когда я добавляю, скажем, стандартную GWT VerticalPanel, с помощью GWT Designer я могу добавлять виджеты на эту панель, перетаскивая их. GWT Designer предоставляет красную линию, указывающую, что я добавляю виджет в свою VerticalPanel.
Предположим, что я хочу создать свою собственную панель с нуля, и я не хочу расширять стандартные панели GWT. Я хочу, чтобы GWT Designer распознавал мою панель и предоставлял те же функции, что и при использовании стандартных панелей gwt.
Насколько я знаю, такие фреймворки, как Ext-GWT, писали свои библиотеки виджетов с нуля, и все же они работают в унисон с GWT Designer. Нужно ли реализовывать определенные методы в моей пользовательской панели для достижения этой функциональности? Любое руководство или идеи приветствуются.
Спасибо
2 ответа
Подводя итог, поддержка нового компонента требует добавления специальной поддержки для этого компонента в GWT Designer. Предположим, у меня есть пользовательский компонент, который я хочу, чтобы он действовал как VerticalPanel, но который является составным типом:
public class CustomPanel extends Composite implements HasWidgets{
private VerticalPanel panel = new VerticalPanel();
public CustomPanel() {
initWidget(panel);
}
@Override
public void add(Widget w) {panel.add(w);}
@Override
public void clear() {panel.clear();}
@Override
public Iterator<Widget> iterator() {return panel.iterator();}
@Override
public boolean remove(Widget w) {return panel.remove(w);}
}
Это будет работать как VerticalPanel, но когда вы смотрите с точки зрения дизайнеров, это все еще является Composite. В результате вы не можете сбросить виджеты внутри него. В простейшем случае, чтобы сделать его удобным для дизайнера, вам нужно создать CustomPanel.wbp-component.xml в том же пакете CustomPanel, следуя указанному соглашению об именах. Простым, чтобы дать поток как поведение добавления виджета было бы,
<?xml version="1.0" encoding="UTF-8"?>
<component xmlns="http://www.eclipse.org/wb/WBPComponent">
<description>This is a simple Composite acting like VerticalPanel</description>
<!-- CREATION -->
<creation>
<source><![CDATA[new org.test.client.CustomPanel()]]></source>
</creation>
<parameters>
<parameter name="flowContainer">true</parameter>
<parameter name="flowContainer.horizontal">false</parameter>
<parameter name="flowContainer.association">%parent%.add(%child%)</parameter>
</parameters>
</component>
После добавления этого шага ваш компоновщик должен обрабатываться как вертикальная панель (отбрасывая виджеты внутри поддержки) и дизайнером gwt. Когда одного этого XML недостаточно, то есть вам нужно более сложное поведение, вам нужно начать писать классы моделей Java, которые определяют пользовательское поведение вашего компонента для Designer, и ссылаться на него в XML-компоненте, используя <model>
тег. В этом случае вам нужно написать плагин для размещения ваших моделей и политик.
Вот ссылки на это резюме и полезные ссылки:
В документации GWT Designer есть страница о пользовательских композитах и панелях, но они относятся к компонентам Swing и SWT. Что касается GWT, документация рекомендует использовать менеджеры компоновки GWT для максимальной переносимости.