Smartclient: Как показать холст на модальной маске?
У меня есть ListGrid
отображается на макете панели. В некоторых случаях мне нужно показать сообщения Notes, которые мы обычно используем SC.say()
,
Но я разработал свой собственный Canvas для отображения всех таких сообщений, и я разместил это на панели инструментов для родителей.
Теперь, когда нужно отобразить сообщение, когда на компоненте Listgrid происходит какое-то действие. Окно установлено модальным, поэтому мой холст Notes отображается, но маскируется макетом панели.
Я хочу отображать холст без маскировки?
Как я могу добиться этого, чтобы показать Canvas без маски, а также отображение ListGrid?
! [введите описание изображения здесь][1] Это то, что на самом деле происходит, поскольку окно установлено в isModal(true) и setModalMask(true), и я знаю, что это необязательно, но требуется в нашем проекте, но теперь мне нужно просто принести ЖЕЛТЫЕ сообщения холста отображаются как обычно подсвеченные, а не с маской, как сейчас.
public class GetMessageDialogBox extends Canvas
{
private GetMessageDialogBox(String messageText)
{
mainLayout = new GetHorizontalLayout("100%", "40", null, 0, 5, null);
btnClose = new GetImgButton(16, 16, "Red_Square_Close.png");
btnClose.setVisible(true);
btnClose.setShowTitle(true);
btnClose.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
setAnimateTime(1000);
animateMove(10 , Window.getClientHeight());
isVisibleMessageStatus = false;
setVisible(false);
}
});
displayLabel = new GetLabel(messageText,"messageLabelDialogText");
displayLabel.setBackgroundColor("yellow");
displayLabel.setHeight100();
displayLabel.setWidth100();
displayLabel.setValign(VerticalAlignment.CENTER);
mainLayout.addMember(new Canvas(){{
setWidth("50%");
}});
mainLayout.addMember(displayLabel);
mainLayout.addMember(new Canvas(){{
setWidth("20%");
}});
mainLayout.addMember(btnClose);
setParentElement(StaticInfo.mainDashboardLayout);
setVisible(true);
setHeight(40);
setBackgroundColor("yellow");
setBorder("1px solid black");
setLeft(10);
setTop(Window.getClientHeight()-40);
setShowShadow(true);
setShadowOffset(5);
setShadowSoftness(5);
setAnimateTime(100);
timer.schedule(5000);
addChild(mainLayout);
customMask.show();
bringToFront();
show();
}
}
Теперь этот компонент Message вызывается в файле презентатора.
customMask.show();
winLoadList.bringToFront();
winLoadList.show();
Приведенный выше код используется для List Grid, поскольку мне нужно показать, что он не маскируется, но теперь, когда я вызываю компонент Message, мне также нужно, чтобы компонент Message отображался без маскировки с помощью следующего кода, но все три браузера дают разные o / p.
customMask.show();
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).bringToFront();
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).show();
1 ответ
У вас есть много способов достичь этого.
Я думаю, что самый легкий пытается позвонить bringToFront()
на вашем желтом холсте.
Этот небольшой фрагмент кода работает, однако, когда вы перемещаете окно, желтый холст идет позади:
Window window = new Window();
window.setIsModal(true);
window.setWidth(800);
window.setHeight(500);
window.setAutoCenter(true);
window.setShowModalMask(true);
window.show();
final HLayout message = new HLayout();
message.setWidth(400);
message.setHeight(30);
message.addMember(new Label("hey you"));
message.setBackgroundColor("yellow");
message.bringToFront();
message.show();
Несмотря на использование setModal(true)
, вы делаете свою собственную модальную маску и, таким образом, вы можете справиться со всем (возможно, есть какое-то лучшее решение).
Код:
public class BusyMask extends VLayout
{
public BusyMask()
{
RootPanel.get().add(this);
hide();
setOpacity(50);
setBackgroundColor("#000000");
setPositionAndSizes();
this.getParentElement().addResizedHandler(
new ResizedHandler()
{
@Override
public void onResized(ResizedEvent event)
{
setPositionAndSizes();
}
});
}
@Override
public void show()
{
this.bringToFront();
super.show();
}
@Override
public void hide()
{
super.hide();
}
protected void setPositionAndSizes()
{
setWidth100();
setHeight100();
setLeft(0);
setTop(0);
}
}
Вы используете это в своем ListGrid
Метод show, при его отображении:
busyMask.show();
bringToFront();
super.show();