GWT CellList组件

GWT CellList组件 介绍

CellList组件代表单个列的列表。

GWT CellList组件 声明

以下是com.google.gwt.user.client.ui.CellList类的声明

public class CellList<T>
   extends AbstractHasData<T>

GWT CellList组件 构造方法

构造方法 描述
CellList(Cell<T> cell) 构造一个新的 CellList。
CellList(Cell<T> cell, CellList.Resources resources) 使用指定的 CellList.Resources 构造一个新的 CellList。
CellList(Cell<T> cell, CellList.Resources resources, ProvidesKey<T> keyProvider) 使用指定的 CellList.Resources 和密钥提供程序构造一个新的 CellList。
CellList(Cell<T> cell, ProvidesKey<T> keyProvider) 使用指定的密钥提供程序构造一个新的 CellList。

GWT CellList组件 方法

方法 描述
protected boolean dependsOnSelection() 检查视图中的单元格是否依赖于选择状态。
protected void doSelection(Event event, T value, int indexOnPage) 已弃用。改用 Abstract HasData.add Cell Preview Handler(com.google.gwt.view.client.Cell Preview Event.Handler)。
protected void fireEventToCell(Cell.Context context, Event event, Element parent, T value) 向单元格触发事件。
protected Cell<T> getCell() 返回用于呈现每个项目的单元格。
protected Element getCellParent(Element item) 从列表项中获取包装单元格的父元素。
protected Element getChildContainer() 返回保存渲染单元格的元素。
SafeHtml getEmptyListMessage() 获取没有数据时显示的消息。
protected Element getKeyboardSelectedElement() 获取具有键盘选择的元素。
Element getRowElement(int indexOnPage) 获取指定索引的元素。
protected boolean isKeyboardNavigationSuppressed() 检查键盘导航是否被抑制,例如当用户编辑单元格时。
protected void onBlur() 当小部件模糊时调用。
protected void onBrowserEvent2(Event event) 在 AbstractHasData.onBrowserEvent(Event) 完成后调用。
protected void onFocus() 当小部件聚焦时调用。
protected void renderRowValues(SafeHtmlBuilder sb, java.util.List<T> values, int start, SelectionModel<? super T> selectionModel)  将所有行值渲染到指定的 SafeHtmlBuilder。
protected boolean resetFocusOnCell() 将焦点重置在当前聚焦的单元格上。
void setEmptyListMessage(SafeHtml html) 设置当没有数据时显示的消息。
protected void setKeyboardSelected(int index, boolean selected, boolean stealFocus) 更新元素以反映其键盘选择状态。
protected void setSelected(Element elem, boolean selected) 已弃用。AbstractHasData 永远不会调用此方法,在 renderRowValues(SafeHtmlBuilder, List, int, SelectionModel) 中渲染选定的样式
void setValueUpdater(ValueUpdater<T> valueUpdater) 设置单元格修改项目时要使用的值更新程序。

GWT CellList组件 示例

1)修改HelloWorld.gwt.xml

<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.8.0//EN"
        "http://gwtproject.org/doctype/2.8.0/gwt-module.dtd">
<module rename-to="HelloWorld">

    <!-- Inherit the core Web Toolkit stuff.                  -->
    <inherits name='com.google.gwt.user.User'/>

    <!-- Specify the app entry point class.                   -->
    <entry-point class='com.yiidian.helloWorld.client.HelloWorld'/>


    <!-- Specify the app servlets.                   -->
    <servlet path='/HelloWorldService' class='com.yiidian.helloWorld.server.HelloWorldServiceImpl'/>

    <source path = 'client'/>
    <source path = 'shared'/>
</module>

2)修改HelloWorld.css

body {
    text-align: center;
    font-family: verdana, sans-serif;
}

h1 {
    font-size: 2em;
    font-weight: bold;
    color: #777777;
    margin: 40px 0px 70px;
    text-align: center;
}

3)修改HelloWorld.html

<html>
<head>
    <title>yiidian.com-GWT Hello World</title>
    <link type="text/css" rel="stylesheet" href="HelloWorld.css">
    <script type="text/javascript" language="javascript" src="HelloWorld/HelloWorld.nocache.js"></script>
</head>
<body>
<h1>CellList Widget Demonstration</h1>
<div id = "gwtContainer"></div>
</body>
</html>

4)HelloWorld.java

package com.yiidian.helloWorld.client;


import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.CellTree;
import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy;
import com.google.gwt.user.cellview.client.TreeNode;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.view.client.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Entry point classes define <code>onModuleLoad()</code>
 */
public class HelloWorld implements EntryPoint {
    /**
     * A simple data type that represents a contact.
     */

    private static class Contact {
        private static int nextId = 0;
        private final int id;
        private String name;

        public Contact(String name) {
            nextId++;
            this.id = nextId;
            this.name = name;
        }
    }

    /**
     * A custom {@link Cell} used to render a {@link Contact}.
     */

    private static class ContactCell extends AbstractCell<Contact> {
        @Override
        public void render(Context context, Contact value, SafeHtmlBuilder sb) {
            if (value != null) {
                sb.appendEscaped(value.name);
            }
        }
    }

    /**
     * The list of data to display.
     */

    private static final List<Contact> CONTACTS = Arrays.asList(new Contact(
                    "John"), new Contact("Joe"), new Contact("Michael"),
            new Contact("Sarah"), new Contact("George"));

    public void onModuleLoad() {
        /*
         * Define a key provider for a Contact. We use the unique ID
         * as the key, which allows to maintain selection even if the
         * name changes.
         */

        ProvidesKey<Contact> keyProvider = new ProvidesKey<Contact>() {
            public Object getKey(Contact item) {
                // Always do a null check.
                return (item == null) ? null : item.id;
            }
        };

        // Create a CellList using the keyProvider.
        CellList<Contact> cellList = new CellList<Contact>(new ContactCell(),
                keyProvider);

        // Push data into the CellList.
        cellList.setRowCount(CONTACTS.size(), true);
        cellList.setRowData(0, CONTACTS);

        // Add a selection model using the same keyProvider.
        SelectionModel<Contact> selectionModel
                = new SingleSelectionModel<Contact>(
                keyProvider);
        cellList.setSelectionModel(selectionModel);

        /*
         * Select a contact. The selectionModel will select based on the
         * ID because we used a keyProvider.
         */
        Contact sarah = CONTACTS.get(3);
        selectionModel.setSelected(sarah, true);

        // Modify the name of the contact.
        sarah.name = "Sara";

        /*
         * Redraw the CellList. Sarah/Sara will still be selected because we
         * identify her by ID. If we did not use a keyProvider,
         * Sara would not be selected.
         */
        cellList.redraw();

        VerticalPanel panel = new VerticalPanel();
        panel.setBorderWidth(1);
        panel.setWidth("200");
        panel.add(cellList);

        // Add the widgets to the root panel.
        RootPanel.get().add(panel);
    }
}

运行应用程序,显示结果如下:

热门文章

优秀文章