#gwt #user-interface #scrollpane
#gwt #пользовательский интерфейс #область прокрутки
Вопрос:
У меня есть Celltree внутри ScrollPanel. Я устанавливаю размер панели прокрутки в UiBinder следующим образом
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:ScrollPanel ui:field="panel" width="240px" height="1200px"></g:ScrollPanel>
</ui:UiBinder>
В моем классе Java у меня есть следующее :
@UiField ScrollPanel panel;
public Arborescence() {
initWidget(uiBinder.createAndBindUi(this));
// Create a model for the tree.
TreeViewModel model = new CustomTreeModel();
/*
* Create the tree using the model. We specify the default value of the
* hidden root node as "Item 1".
*/
CellTree tree = new CellTree(model, "Item 1");
panel.add(tree);
}
Моя проблема в том, что когда я заполняю CellTree, горизонтальная панель не отображается, даже содержимое переполняется. Вертикальная панель отображается нормально.
Спасибо
Обновить
Используя FireBug, я вижу, что проблема возникает из element.style {
overflow: hidden;
}
Похоже, что это встроенный CSS, который переопределяет мой CSS. Есть ли какой-либо способ изменить это?
Ответ №1:
Решение LIENMAN78 немного сложнее. Хорошо…После нескольких часов поиска я нашел простое решение: обернуть CellTree в HorizontalPanel (или VerticalPanel), а затем добавить его в ScrollPanel
Вот CellTree.ui.XML
<g:ScrollPanel width="100%" height ="1200px">
<g:HorizontalPanel ui:field="panel">
</g:HorizontalPanel>
</g:ScrollPanel>
И соответствующая часть CellTree.java
...
@UiField HorizontalPanel panel;
...
panel.add(cellTree)
Комментарии:
1. 1 Это также решает проблему, связанную с тем, что фон не распространяется полностью на элементы шире рамки.
2. Когда я пытаюсь это сделать, панель прокрутки просто расширяется, чтобы содержать HPanel внутри нее, и не отображает горизонтальные полосы прокрутки…. есть ли у вас какой-либо специальный CSS или другой трюк, чтобы заставить ScrollPanel фактически действовать как HorizontalScrollPanel?
3. @Andrew, здесь не задействован CSS, просто убедитесь, что панель прокрутки или панель, которая ее содержит, имеет фиксированный размер (ширина и высота)
4. Может ли кто-нибудь, у кого это работает, опубликовать рабочий набор.gwt.xml и .java и .css, которые я мог бы использовать в качестве отправной точки, чтобы заставить мой код работать? Мои фрагменты кода уже соответствуют приведенным здесь, и у меня это не работает… Спасибо миллион!!!
5. Хорошо, теперь это работает. Для справки для других, у меня была своя внутри VerticalPanel (использует таблицы), и это, казалось, сломало ее…
Ответ №2:
Это не самое красивое решение, но вот быстрое решение.
/* fix horizontal scroll issue */
.cellTreeWidget>div,
.cellTreeWidget>div>div>div>div>div,
.cellTreeWidget>div>div>div>div>div>div>div>div>div
{
overflow: visible !important;
}
Вы можете сохранить .cellTreeWidget как есть, если вы переопределяете CellTree.Стиль, но если вы хотите просто сделать это быстро и грязно, измените его на любое имя стиля, которое вы добавили в CellTree.
Вы можете сделать это только один раз и выполнить замену в вашем модуле xml, чтобы при вызове CellTree GWT.create(Resource.class ) внутренне он автоматически заменяется версией с вашим исправлением.
<replace-with class="com.foo.common.client.gwt.laf.resource.CellTreeResources">
<when-type-is class="com.google.gwt.user.cellview.client.CellTree.Resources" />
</replace-with>
public class CellTreeResources implements CellTree.Resources
{
@Override
public ImageResource cellTreeClosedItem()
{
return CellBrowserResourcesImpl.INSTANCE.cellTreeClosedItem();
}
@Override
public ImageResource cellTreeLoading()
{
return LoadingResource.INSTANCE.loadingBar();
}
@Override
public ImageResource cellTreeOpenItem()
{
return CellBrowserResourcesImpl.INSTANCE.cellTreeOpenItem();
}
@Override
public ImageResource cellTreeSelectedBackground()
{
return CellBrowserResourcesImpl.INSTANCE.cellTreeSelectedBackground();
}
@Override
public Style cellTreeStyle()
{
return CellBrowserResourcesImpl.INSTANCE.cellTreeStyle();
}
public interface CellBrowserResourcesImpl extends CellTree.Resources
{
static final CellBrowserResourcesImpl INSTANCE = GWT.create(CellBrowserResourcesImpl.class);
@Override
@Source({ CellTree.Style.DEFAULT_CSS, "cellTree.css" })
Style cellTreeStyle();
}
}