gwt:如何在另一个事件中使用由 onClick 创建的小部件?

gwt: How to use a widget which is created by onClick in another event?

我需要在此处使用小部件 shapei(由 onClick 创建):public void onElementConnect(ElementConnectEvent event) {}....if(connected.equals(**shapei**.connectedWidget)){。我该如何解决这个问题?如果有人可以帮助我,那就太好了!这是完整的代码:

public class Projekt implements EntryPoint {

    private RootPanel rootPanel;

    public void onModuleLoad() {

         rootPanel = RootPanel.get("gwtContainer");
         rootPanel.setSize("1902", "868");

         final AbsolutePanel boundaryPanel = new AbsolutePanel();
         boundaryPanel.setStyleName("frame1");
         boundaryPanel.setSize("1455px", "600px");       

         final Diagram diagram = new Diagram(boundaryPanel);

         RootPanel.get().add(boundaryPanel, 446, 242);

         final Connector con = new Connector(100, 300, 300, 500);

         Button la = new Button("Push");
         la.setSize("200", "200");
         boundaryPanel.add(la);

         Button la2 = new Button("Push2");
         la2.setSize("200", "200");
         boundaryPanel.add(la2);

         Image img2 = new Image("images/variable.svg");
         img2.setSize("200", "200");
         boundaryPanel.add(img2, 200,200);

         final Shape shapei2 = new Shape(img2);
         shapei2.showOnDiagram(diagram);

         la.addClickHandler(new ClickHandler(){

            @Override
            public void onClick(ClickEvent event) {
                 final Image img = new Image("images/concrete.svg");
                 img.setSize("200", "200");
                 boundaryPanel.add(img, 200,200);
                 Shape shapei = new Shape(img);
                 shapei.showOnDiagram(diagram);}

            public void onElementConnect(ElementConnectEvent event) {
                       if (con.startEndPoint.isGluedToConnectionPoint()) {
                           Widget connected = con.startEndPoint.gluedConnectionPoint.parentWidget;
                           if(connected.equals(shapei.connectedWidget)){
                         Image logo = new Image("images/xor.svg");
                         logo.setSize("100", "100");
                         boundaryPanel.add(logo);
                       }
                           else if(connected.equals(shapei2.connectedWidget)){
                                Image logo2 = new Image("images/and.svg");
                             logo2.setSize("100", "100");
                             boundaryPanel.add(logo2);
                           };
                     }}

            }

         );
         la2.addClickHandler(new ClickHandler(){

                @Override
                public void onClick(ClickEvent event) {

                     con.showOnDiagram(diagram);
                }

             });




}}

推荐选项

您应该将 shapei 的声明移到匿名回调方法之外。一旦 onClick 方法完成,引用就会超出范围。如果将声明移动到全局范围,则可以在其他方法中访问它。如果您将视图部分移动到外部 class 而不是在您的 EntryPoint class 顺便说一句,这一切看起来并不奇怪。您可以使用类似于名为 DiagramActivity 的简单 Activity,并且在您的入口点中,您只需在 activity 上调用 start。

public class Projekt 实现 EntryPoint {

private RootPanel rootPanel;

Shape shapei;

public void onModuleLoad() {
   ....
}

另一种选择 如果将它添加到 DOM,则可以使用文档 class 或 GwtQuery 查找它。不过这可能会慢得多。