Java Smartclient:如何在模式掩码上显示画布?

Java Smartclient:如何在模式掩码上显示画布?,java,smartgwt,listgrid,Java,Smartgwt,Listgrid,我在仪表板布局上显示了一个ListGrid。在少数情况下,我需要显示Notes消息,我们通常使用SC.say() 但是我已经设计了自己的画布来显示所有这样的消息,并且我已经将其放在家长仪表板上 现在需要在Listgrid组件上执行某些操作时显示消息。该窗口设置为模态,以便显示my Notes画布,但被仪表板布局遮罩 我想在没有遮罩的情况下显示画布 如何实现这一点,以显示无遮罩的画布以及ListGrid显示 !![在此处输入图像描述][1] 这就是当窗口被设置为isModal(true)和setM

我在仪表板布局上显示了一个
ListGrid
。在少数情况下,我需要显示Notes消息,我们通常使用
SC.say()

但是我已经设计了自己的画布来显示所有这样的消息,并且我已经将其放在家长仪表板上

现在需要在Listgrid组件上执行某些操作时显示消息。该窗口设置为模态,以便显示my Notes画布,但被仪表板布局遮罩

我想在没有遮罩的情况下显示画布

如何实现这一点,以显示无遮罩的画布以及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(); 
}
}
现在,在presenter文件中调用此消息组件

customMask.show();
winLoadList.bringToFront();
winLoadList.show();
上面的代码用于列表网格,因为我需要显示的是unmask,但现在当我调用消息组件时,我还需要使用下面的代码显示unmasked的消息组件,但所有三个浏览器都提供不同的o/p

customMask.show();
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).bringToFront();
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).show();

你有很多方法可以做到这一点

我认为最简单的方法是在黄色画布上调用
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();

我不明白你的问题。该模式是可选的。你能发布一些示例代码,或者更好的截图吗?@Jean-Michel Garcia:我已经用添加的截图编辑了我的问题。我只想正常显示黄色画布,即在显示ListGrid时不带遮罩。我认为需要保持遮罩。我们无法在StackOverflow在您的位置执行此项工作。你需要发布一些相关的代码,而不是全部。你这样的帖子,肯定会被社区忽略。我已经发布了一些关于你如何做到这一点的线索。@Jean-Michel Garcia:我添加了我的代码,就像你无法分析的前一个代码一样,以便让你对它有一个清晰的认识,而且我也不希望在我的地方完成全部工作。谢谢你到目前为止的帮助,这对你来说是一个很长的问题,但对其他人来说可能是谢谢你的回复。我试着在画布上使用bringToFront(),但它不起作用。你能建议其他方法吗?最后一件事,你的画布是如何绘制的?它是被添加为某个布局的addMember,还是仅仅被绘制?我正在编辑我的回答,它被添加为Hlayut上的addMember。我会尝试这个,但因为我有很多这样的屏幕。那么,有没有办法在创建的画布组件中绑定代码呢。我在问题中附上部件代码。如果你能建议一些更简单的way@Shraddha巴特,我为你提供了实现这一目标的一切。请用您的实际代码更新您的问题