GWT CellTree组件

GWT CellTree组件 介绍

CellTree组件代表树的视图。

GWT CellTree组件 声明

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

public class CellTree
   extends AbstractCellTree
      implements HasAnimation, Focusable

CSS 样式规则

以下默认 CSS 样式规则将应用于所有CellTree标签。您可以根据您的要求覆盖它。

.gwt-Tree {}

.gwt-TreeItem {}

.gwt-TreeItem-selected {}

GWT CellTree组件 构造方法

构造方法 描述
CellTree(TreeViewModel viewModel, T rootValue) 构建一个新的 CellTree。
CellTree(TreeViewModel viewModel, T rootValue, CellTree.Resources resources) 构建一个新的 CellTree。

GWT CellTree组件 方法

方法 描述
protected char getAccessKey() 获取访问密钥。
CellTree.NodeAnimation getAnimation() 如果启用了动画,则获取用于打开和关闭此树中节点的动画。
int getDefaultNodeSize() 获取每个树节点下显示的默认最大子节点数。
TreeNode getRootTreeNode() 获取根 TreeNode。
int getTabIndex() 获取小部件在选项卡索引中的位置。
boolean isAnimationEnabled() 如果启用动画,则返回 true,否则返回 false。
protected void onBlur() 当键盘选定节点失去焦点时调用。
void onBrowserEvent(Event event) 每当接收到浏览器事件时触发。
protected void onFocus() 当键盘选定节点获得焦点时调用。
void setAccessKey(char key) 设置小部件的“访问密钥”。
void setAnimation(CellTree.NodeAnimation animation) 设置用于打开和关闭此树中节点的动画。
void setAnimationEnabled(boolean enable) 启用或禁用动画。
void setDefaultNodeSize(int defaultNodeSize) 设置要在每个子节点下方显示的默认子节点数。
void setFocus(boolean focused) 显式聚焦/取消聚焦此小部件。
void setTabIndex(int index) 设置小部件在选项卡索引中的位置。

GWT CellTree组件 示例

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>CellTree 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.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.ListDataProvider;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.TreeViewModel;
import java.util.ArrayList;
import java.util.List;

/**
 * Entry point classes define <code>onModuleLoad()</code>
 */
public class HelloWorld implements EntryPoint {
    /**
     * A list of songs.
     */

    private static class Playlist {
        private final String name;
        private final List<String> songs = new ArrayList<String>();

        public Playlist(String name) {
            this.name = name;
        }

        /**
         * Add a song to the playlist.
         *
         * @param name the name of the song
         */

        public void addSong(String name) {
            songs.add(name);
        }

        public String getName() {
            return name;
        }

        /**
         * Return the list of songs in the playlist.
         */

        public List<String> getSongs() {
            return songs;
        }
    }

    /**
     * A composer of classical music.
     */

    private static class Composer {
        private final String name;
        private final List<Playlist> playlists = new ArrayList<Playlist>();

        public Composer(String name) {
            this.name = name;
        }

        /**
         * Add a playlist to the composer.
         *
         * @param playlist the playlist to add
         */

        public Playlist addPlaylist(Playlist playlist) {
            playlists.add(playlist);
            return playlist;
        }

        public String getName() {
            return name;
        }

        /**
         * Return the rockin' playlist for this composer.
         */

        public List<Playlist> getPlaylists() {
            return playlists;
        }
    }

    /**
     * The model that defines the nodes in the tree.
     */
    private static class CustomTreeModel implements TreeViewModel {

        private final List<Composer> composers;

        /**
         * This selection model is shared across all leaf nodes.
         * A selection model can also be shared across all nodes
         * in the tree, or each set of child nodes can have
         * its own instance. This gives you flexibility to
         * determine how nodes are selected.
         */
        private final SingleSelectionModel<String> selectionModel
                = new SingleSelectionModel<String>();

        public CustomTreeModel() {
            // Create a database of information.
            composers = new ArrayList<Composer>();

            // Add compositions by Beethoven.
            {
                Composer beethoven = new Composer("Beethoven");
                composers.add(beethoven);

                Playlist concertos = beethoven.addPlaylist(
                        new Playlist("Concertos"));
                concertos.addSong("No. 1 - C");
                concertos.addSong("No. 2 - B-Flat Major");
                concertos.addSong("No. 3 - C Minor");
                concertos.addSong("No. 4 - G Major");
                concertos.addSong("No. 5 - E-Flat Major");

                Playlist quartets = beethoven.addPlaylist(
                        new Playlist("Quartets"));
                quartets.addSong("Six String Quartets");
                quartets.addSong("Three String Quartets");
                quartets.addSong("Grosse Fugue for String Quartets");

                Playlist sonatas = beethoven.addPlaylist(
                        new Playlist("Sonatas"));
                sonatas.addSong("Sonata in A Minor");
                sonatas.addSong("Sonata in F Major");

                Playlist symphonies = beethoven.addPlaylist(
                        new Playlist("Symphonies"));
                symphonies.addSong("No. 2 - D Major");
                symphonies.addSong("No. 2 - D Major");
                symphonies.addSong("No. 3 - E-Flat Major");
                symphonies.addSong("No. 4 - B-Flat Major");
                symphonies.addSong("No. 5 - C Minor");
                symphonies.addSong("No. 6 - F Major");
                symphonies.addSong("No. 7 - A Major");
                symphonies.addSong("No. 8 - F Major");
                symphonies.addSong("No. 9 - D Minor");
            }

            // Add compositions by Brahms.
            {
                Composer brahms = new Composer("Brahms");
                composers.add(brahms);
                Playlist concertos = brahms.addPlaylist(
                        new Playlist("Concertos"));
                concertos.addSong("Violin Concerto");
                concertos.addSong("Double Concerto - A Minor");
                concertos.addSong("Piano Concerto No. 1 - D Minor");
                concertos.addSong("Piano Concerto No. 2 - B-Flat Major");

                Playlist quartets = brahms.addPlaylist(
                        new Playlist("Quartets"));
                quartets.addSong("Piano Quartet No. 1 - G Minor");
                quartets.addSong("Piano Quartet No. 2 - A Major");
                quartets.addSong("Piano Quartet No. 3 - C Minor");
                quartets.addSong("String Quartet No. 3 - B-Flat Minor");

                Playlist sonatas = brahms.addPlaylist(
                        new Playlist("Sonatas"));
                sonatas.addSong("Two Sonatas for Clarinet - F Minor");
                sonatas.addSong("Two Sonatas for Clarinet - E-Flat Major");

                Playlist symphonies = brahms.addPlaylist(
                        new Playlist("Symphonies"));
                symphonies.addSong("No. 1 - C Minor");
                symphonies.addSong("No. 2 - D Minor");
                symphonies.addSong("No. 3 - F Major");
                symphonies.addSong("No. 4 - E Minor");
            }

            // Add compositions by Mozart.
            {
                Composer mozart = new Composer("Mozart");
                composers.add(mozart);
                Playlist concertos = mozart.addPlaylist(
                        new Playlist("Concertos"));
                concertos.addSong("Piano Concerto No. 12");
                concertos.addSong("Piano Concerto No. 17");
                concertos.addSong("Clarinet Concerto");
                concertos.addSong("Violin Concerto No. 5");
                concertos.addSong("Violin Concerto No. 4");
            }
        }

        /**
         * Get the {@link NodeInfo} that provides the children of the
         * specified value.
         */

        public <T> NodeInfo<?> getNodeInfo(T value) {
            if (value == null) {
                // LEVEL 0.
                // We passed null as the root value. Return the composers.

                // Create a data provider that contains the list of composers.
                ListDataProvider<Composer> dataProvider
                        = new ListDataProvider<HelloWorld.Composer>(
                        composers);

                // Create a cell to display a composer.
                Cell<Composer> cell
                        = new AbstractCell<Composer>() {
                    @Override
                    public void render(Context context, Composer value, SafeHtmlBuilder sb) {
                        if (value != null) {
                            sb.appendHtmlConstant("    ");
                            sb.appendEscaped(value.getName());
                        }
                    }
                };

                // Return a node info that pairs the data provider and the cell.
                return new DefaultNodeInfo<Composer>(dataProvider, cell);
            } else if (value instanceof Composer) {

                // LEVEL 1.
                // We want the children of the composer. Return the playlists.
                ListDataProvider<HelloWorld.Playlist> dataProvider
                        = new ListDataProvider<HelloWorld.Playlist>(
                        ((Composer) value).getPlaylists());
                Cell<HelloWorld.Playlist> cell =
                        new AbstractCell<HelloWorld.Playlist>() {
                            @Override
                            public void render(Context context, Playlist value, SafeHtmlBuilder sb) {
                                if (value != null) {
                                    sb.appendHtmlConstant("    ");
                                    sb.appendEscaped(value.getName());
                                }
                            }
                        };
                return new DefaultNodeInfo<Playlist>(dataProvider, cell);
            } else if (value instanceof Playlist) {
                // LEVEL 2 - LEAF.
                // We want the children of the playlist. Return the songs.
                ListDataProvider<String> dataProvider
                        = new ListDataProvider<String>(
                        ((Playlist) value).getSongs());

                // Use the shared selection model.
                return new DefaultNodeInfo<String>(dataProvider, new TextCell(),
                        selectionModel, null);
            }

            return null;
        }

        /**
         * Check if the specified value represents a leaf node.
         * Leaf nodes cannot be opened.
         */
        public boolean isLeaf(Object value) {

            // The leaf nodes are the songs, which are Strings.
            if (value instanceof String) {
                return true;
            }

            return false;
        }
    }

    public void onModuleLoad() {

        // Create a model for the tree.
        TreeViewModel model = new CustomTreeModel();
        //Get CellTree style using its BasicResources
        //CellTree.Resources res = GWT.create(CellTree.BasicResources.class);

        /*
         * Create the tree using the model. We use <code>null</code>
         * as the default value of the root node. The default value will
         * be passed to CustomTreeModel#getNodeInfo();
         */
        CellTree tree = new CellTree(model, null);

        tree.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.ENABLED);

        // Open the first playlist by default.
        TreeNode rootNode = tree.getRootTreeNode();
        TreeNode firstPlaylist = rootNode.setChildOpen(0, true);
        firstPlaylist.setChildOpen(0, true);

        VerticalPanel panel = new VerticalPanel();
        panel.setBorderWidth(1);
        panel.setWidth("300");
        panel.add(tree);


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

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

热门文章

优秀文章