Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在GWT中模块化面板_Java_Gwt - Fatal编程技术网

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);
子面板本身可以使用其他子面板,对于这些子面板,模块化应该级联。现在我需要做些什么来启用它?谷歌文档对我来说不是很清楚。具体来说,

  • 如何在单个文件(包或文件夹)中定义这些面板,以便将它们导入主文件

  • 如何导入它们(有点像PHP中的
    include

  • 我需要对
    xml
    文件进行哪些更改(如果需要)

  • 如何为导入的文件定义相同的规则集,以便导入级联?也就是说,如果
    a
    导入
    b
    ,并且
    b
    导入
    c
    d
    来构造自身,那么导入时
    c
    d
    都导入主文件

  • 主CSS文件中的
    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
    。我应该把组件面板放在这个位置吗