gpt4 book ai didi

java - SmartGWT ListGrid 最终版

转载 作者:行者123 更新时间:2023-12-01 04:42:24 24 4
gpt4 key购买 nike

我意识到 ListGrid 必须始终是 Final。对我来说,静态对象是最好的,因为我想从另一个类修改它的属性。

在我的项目中,为了拥有清晰的代码,我创建了几个类。

  1. DataGrid 扩展了ListGrid,它设置新对象的属性并填充数据。 @Override 方法将按钮添加到我的网格对象。

  2. PopupWindow扩展Window,用于在单击ListGrid中的编辑按钮时创建一个Window对象。在窗口中有一些文本框,您可以在其中添加新数据和“提交”按钮。提交按钮的 OnClick 事件会将数据写入 MySQL 服务器,并且应该使用实际数据更新网格(来自 MySQL 的查询)。这是我无法实现的部分。

  3. 在入口点类 onModuleLoad 中,我只有以下网格代码:

    最终 DataGrid grid_far = new DataGrid();grid_far.setGridData();

我是java新手,也许我不应该使用这么多类,只需将所有内容放在入口点类onModuleLoad()中即可?

如果在 PopupWindow 扩展 Window 类中我声明 Button OnClick 以从 Entry Point 类运行 onModuleLoad() 方法,这会重复我的网页吗?我的意思是这样做:

 EntryPointClass ep = new EntryPointClass();
ep.onModuleLoad();

最佳答案

  • “ListGrid 必须始终是 Final”

这是没有必要的。可以将 ListGrid 变量创建为非最终变量。
您一定见过将 ListGrid 变量声明为 Final 的示例,但这是出于其他原因。

例如,不可能在匿名内部类中使用非最终局部变量(在方法内声明的变量)。
因此,为了从内部类访问局部变量,需要将它们声明为final。
在 SmartGWT/Swing/等中。内部类用于实现各种回调功能,例如事件处理。

public class Screen {

ListGrid grid1 = new ListGrid();
TextItem text1 = new TextItem("text1", "Text 1");

public void initialize() {
// normally its not required to create subclasses of ListGrid/Button/Window/etc.
// unless a significant change in their behavior is needed

ListGrid grid2 = new ListGrid();
// setup grid properties
// set grid fields

TextItem text2 = new TextItem("text2", "Text 2");

final ListGrid grid3 = new ListGrid();
final TextItem text3 = new TextItem("text3", "Text 3");

IButton button = new IButton("Edit");
button.addClickHandler(new ClickHandler() { // this is declaring an anonymous inner class
public void onClick(ClickEvent clickEvent) { // this method is a member of that anonymous inner class
// out of three ListGrid and thee TextItem instances, only following can be accessed in this method/class
// grid1, text1 (these are not local variables, inner class can access outer class members without any issue)
// grid3, text3 (as they are final, even though local variables)
}
});

// that does not mean, grid2 and text2 can not be used, they can be, just not inside an anonymous inner class
// e.g.-
DynamicForm form = new DynamicForm();
form.setFields(text2);

VLayout layout = new VLayout();
layout.addMember(grid2);
}
}

检查以下链接以获取有关在内部类中使用局部变量的更多详细信息
Inner class and local variables
Question about local final variable in Java

  • “静态对象是最好的,因为我想从另一个类修改它的属性”

有比使用静态变量更好的方法在对象之间进行通信。

  • “也许我不应该使用这么多类,只需将所有内容都放在入口点类 onModuleLoad() 中即可”

最好将 onModuleLoad() 中的代码保持在最低限度。
所需的类数量取决于您尝试实现的内容。

  • “入口点”

您无法删除 EntryPoint 实现,因为 GWT 将在其中移交执行以创建应用程序。
GWT/JavaScript 引擎为此调用 onModuleLoad()。
您的代码不得调用它。

浏览SmartGWT showcase包括代码示例。
请参阅SmartGWT API了解更多详情。
有多种方法可以创建 UI 来实现相同的结果。

在 SmartGWT 中与服务器通信以发送/接收数据本身就是一个主题。

可能的实现指南。

public class EntryPointClass implements EntryPoint {
public void onModuleLoad() {
ApplicationScreen screen = new ApplicationScreen();

HStack drawArea = new HStack();
drawArea.setWidth100();
drawArea.setHeight100();
drawArea.addMember(screen.getComponents());
drawArea.draw();
}
}

public class ApplicationScreen { // this class does not need to extend from a widget
public Canvas getComponents() {
// a method that prepares the interface
// using a from+grid type layout, without a popup window

ListGrid grid = getListGrid();

DynamicForm form = getDynamicForm(grid); // have to pass grid in order to add/update records on button events

VLayout layout = new VLayout();
layout.addMember(form);
layout.addMember(grid);

return layout;
}

private DynamicForm getDynamicForm(final ListGrid grid) { // have to declare grid as final to access from event handler inner classes
final TextItem text1 = new TextItem("text1", "Text 1"); // have to declare as final for same reason

ButtonItem saveButton = new ButtonItem("Save");
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
// use text1, grid and other components to save form values and refresh grid
}
});

// creating and configuring form
DynamicForm form = new DynamicForm();
form.setWidth100();
form.setFields(text1, saveButton);

return form;
}

private ListGrid getListGrid() {
// preparing grid fields
ListGridField field1 = new ListGridField("field1", "Field 1");

// creating and configuring grid
ListGrid grid = new ListGrid(); // not final, does not need to be
grid.setWidth100();
grid.setFields(field1);

return grid;
}
}

关于java - SmartGWT ListGrid 最终版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16313936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com