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 查找它。不过这可能会慢得多。
我需要在此处使用小部件 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 查找它。不过这可能会慢得多。