Java 如何在GWT中模块化面板
假设我的页面有以下布局:Java 如何在GWT中模块化面板,java,gwt,Java,Gwt,假设我的页面有以下布局: vertical panel mainbody = new VerticalPanel; //beginning of 1st sub-vertical panel VerticalPanel first_panel = new verticalPanel(); first_panel.add(...); //other such stuff, end of first_panel mainbody.add(first_panel); //beginning of
vertical panel mainbody = new VerticalPanel;
//beginning of 1st sub-vertical panel
VerticalPanel first_panel = new verticalPanel();
first_panel.add(...);
//other such stuff, end of first_panel
mainbody.add(first_panel);
//beginning of 2nd sub-vertical panel
VerticalPanel second_panel = new verticalPanel();
second_panel.add(...);
//other such stuff, end of first_panel
mainbody.add(second_panel);
//beginning of 3rd sub-vertical panel
VerticalPanel third_panel = new verticalPanel();
third_panel.add(...);
//other such stuff, end of first_panel
mainbody.add(third_panel);
//end of mainbody
RootPanel.get().add(mainbody);
我想将其模块化,这样每个子面板(first_panel
、second_panel
和third_panel
)都属于单独的文件,这样在导入之后,我就可以在主页中对其进行编码来完成以下操作:
vertical panel mainbody = new VerticalPanel;
mainbody.add(first_panel);
mainbody.add(second_panel);
mainbody.add(third_panel);
//end of mainbody
RootPanel.get().add(mainbody);
子面板本身可以使用其他子面板,对于这些子面板,模块化应该级联。现在我需要做些什么来启用它?谷歌文档对我来说不是很清楚。具体来说,
include
)xml
文件进行哪些更改(如果需要)a
导入b
,并且b
导入c
和d
来构造自身,那么导入时c
和d
都导入主文件CSS
规则对于所有导入的面板是否足够如果有人能从默认的StockWatcher应用程序的角度解释这一点,该应用程序附带
GWT
(这样我们就可以有一些共同点来理解目录结构),我就很容易理解了。您所问的是所谓的自定义小部件。您可以创建一个自定义小部件来表示第一个_面板,另一个小部件来表示第二个_面板,等等。然后,如果需要,您可以创建由其他小部件组成的小部件。每个自定义小部件都是一个单独的类-它将由一个单独的文件(如果您为自定义小部件使用Ui:Binder,则为两个文件)表示
您可以在此处阅读有关自定义小部件的更多信息:
您所询问的内容称为自定义小部件。您可以创建一个自定义小部件来表示第一个_面板,另一个小部件来表示第二个_面板,等等。然后,如果需要,您可以创建由其他小部件组成的小部件。每个自定义小部件都是一个单独的类-它将由一个单独的文件(如果您为自定义小部件使用Ui:Binder,则为两个文件)表示 您可以在此处阅读有关自定义小部件的更多信息:
您需要用面板制作一个
小部件
package com.example.widgets // Make this package whatever you want
import com.google.gwt.user.client.ui.Composite
public class FirstPanel extends Composite{
private VerticalPanel verticalPanel;
public FirstPanel(){
verticalPanel = new VerticalPanel();
// All composites must call initWidget() in their constructors.
initWidget(verticalPanel);
// For your CSS
setStyleName("example-SomeStyle");
// Continue constructing object ...
}
}
每次使用构造函数时,initWidget()。它将小部件设置为由组合包装。检查文档
那么你就可以像这样使用它了
VerticalPanel mainPanel = new VerticalPanel();
FirstPanel firstPanel = new FirstPanel();
mainPanel.add(firstPanel);
以上应该回答第1点
如果您的小部件与上面的代码不在同一个包中,则需要导入它。对于上面的示例:import com.example.widget.FirstPanel
不需要在XML文件中进行任何更改
是的,导入将如您所述级联
只要在小部件中声明样式名称,主CSS中的CSS规则就足够了。您可以通过调用setStyleName(“示例SomeStyle”)代码>如上面的示例所示
您需要从面板中制作一个小部件
package com.example.widgets // Make this package whatever you want
import com.google.gwt.user.client.ui.Composite
public class FirstPanel extends Composite{
private VerticalPanel verticalPanel;
public FirstPanel(){
verticalPanel = new VerticalPanel();
// All composites must call initWidget() in their constructors.
initWidget(verticalPanel);
// For your CSS
setStyleName("example-SomeStyle");
// Continue constructing object ...
}
}
每次使用构造函数时,initWidget()。它将小部件设置为由组合包装。检查文档
那么你就可以像这样使用它了
VerticalPanel mainPanel = new VerticalPanel();
FirstPanel firstPanel = new FirstPanel();
mainPanel.add(firstPanel);
以上应该回答第1点
如果您的小部件与上面的代码不在同一个包中,则需要导入它。对于上面的示例:import com.example.widget.FirstPanel
不需要在XML文件中进行任何更改
是的,导入将如您所述级联
只要在小部件中声明样式名称,主CSS中的CSS规则就足够了。您可以通过调用setStyleName(“示例SomeStyle”)代码>如上面的示例所示
有一件事。我已经开发了基于面板的一切。那么现在如果我用它们制作小部件,为面板定义的任何功能(比如,像click
,mouseup
等事件处理程序)都会受到干扰吗?顺便说一句,我编辑了我的第四点,看看你现在是否清楚了……)而且我不理解目录结构。如果你想到StockWatcher应用程序,有一个名为com.google.gwt.sample.StockWatcher.client
的包,它本身包含3个java
文件、StockWatcher.java
、GreetingService.java
和GreetingServiceAsync.java
。我是否应该将组件面板保留在这个包中,这样我就可以像导入com.google.gwt.sample.stockwatcher.client.subpanel_1一样导入它呢?不要把它看得太糟,但我认为你应该从学习Java开始,然后只将gwt加入其中。你缺乏一些严肃的基本概念:你甚至不知道什么是包!嗯,你是对的,我对Java非常陌生,我必须在学习Java的同时同时做这个GWT项目。我也是GWT的新手,所以有些问题看起来很基本,是的。有一件事。我已经开发了基于面板的一切。那么现在如果我用它们制作小部件,为面板定义的任何功能(比如,像click
,mouseup
等事件处理程序)都会受到干扰吗?顺便说一句,我编辑了我的第四点,看看你现在是否清楚了……)而且我不理解目录结构。如果你想到StockWatcher应用程序,有一个名为com.google.gwt.sample.StockWatcher.client
的包,它本身包含3个java
文件、StockWatcher.java
、GreetingService.java
和GreetingServiceAsync.java
。我应该把组件面板放在这个位置吗