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();
Другие вопросы по тегам