在Eclipse中寻找GWT / Derby的一些帮助

时间:2010-03-20 12:44:46

标签: ajax eclipse gwt derby

我正试图通过this网站学习AJAX。我已经把它写到了“你必须把代码放在onModuleLoad()”的部分(在清单4的正上方)。我在Eclipse项目中发现了两个提到onModuleLoad()的区域:slicr.java和gwt-user.jar / com.google.gwt.core.client包中的实际EntryPoint.class文件。当我尝试将listing的内容添加到slicr.java时,我得到了大量无法解决的类型错误,我无法向EntryPoint.class添加任何内容,因为它似乎被锁定而无法编辑。我非常感谢有人能给我的任何帮助!

这是添加到slicr.java后的代码:

package com.ibm.examples.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
 public class Slicr implements EntryPoint {
private DockPanel panel;
private List clearables;

/**
 * This is the entry point method.
 */
public void onModuleLoad() {
    clearables = new ArrayList();
    initDockPanel();
    panel.add(buildActionPanel(), DockPanel.SOUTH);
    panel.add(buildPizzaTypePanel(), DockPanel.WEST);
    panel.add(buildToppingPanel(), DockPanel.EAST);
    RootPanel.get("slicr").add(panel);
}
private void initDockPanel() {
    panel = new DockPanel();
    panel.setBorderWidth(1);
    panel.setSpacing(5);
}
public HorizontalPanel buildActionPanel() {
    HorizontalPanel actions = new HorizontalPanel();
    actions.setSpacing(10);
    Button clear = new Button("Clear");
    clear.addClickListener(new ClearClickListener());
    Button newPizza = new Button("Another Pizza");
    Button submitOrder = new Button("Submit");
    actions.add(clear);
    actions.add(newPizza);
    actions.add(submitOrder);
    return actions;
}
public static final String[] PIZZA_TYPES = new String[] {
    "Thin Crust Medium", "Thin Crust Large", 
    "Thin Crust X-Large", "Thick Crust Medium", 
    "Thick Crust Large"
};

private VerticalPanel buildPizzaTypePanel() {
    VerticalPanel pizzaTypes = new VerticalPanel();
    HTML label = new HTML("<h2>Pizza</h2>");
    pizzaTypes.add(label);
    for (int i = 0; i < PIZZA_TYPES.length; i++) {
        RadioButton radio = new RadioButton("pizzaGroup", 
            PIZZA_TYPES[i]);
        clearables.add(radio);
        pizzaTypes.add(radio);
    }
    return pizzaTypes;
}
public static final String[] TOPPINGS = new String[] {
    "Anchovy", "Gardineria", "Garlic", 
    "Green Pepper", "Mushrooms", "Olives", 
    "Onions", "Pepperoni", "Pineapple", 
    "Sausage", "Spinach"
};

private VerticalPanel buildToppingPanel() {
    VerticalPanel toppings = new VerticalPanel();
    toppings.add(new HTML("<h2>Toppings</h2>"));
    Grid topGrid = new Grid(TOPPINGS.length + 1, 3);
    topGrid.setText(0, 0, "Topping");
    topGrid.setText(0, 1, "Left");
    topGrid.setText(0, 2, "Right");
    for (int i = 0; i < TOPPINGS.length; i++) {
        Button button = new Button(TOPPINGS[i]);
        CheckBox leftCheckBox = new CheckBox();
        CheckBox rightCheckBox = new CheckBox();
        clearables.add(leftCheckBox);
        clearables.add(rightCheckBox);
        button.addClickListener(new ToppingButtonListener(
                leftCheckBox, rightCheckBox));
        topGrid.setWidget(i + 1, 0, button);    
        topGrid.setWidget(i + 1, 1, leftCheckBox);
        topGrid.setWidget(i + 1, 2, rightCheckBox);
    }
    toppings.add(topGrid);
    return toppings;
}
private class ClearClickListener implements ClickListener {
    public void onClick(Widget sender) {
    for (Iterator iter = clearables.iterator(); iter.hasNext();) {
            CheckBox cb = (CheckBox) iter.next();
            cb.setChecked(false);
        }
    }
}
private class ToppingButtonListener implements ClickListener {

    private CheckBox cb1;
    private CheckBox cb2;

    public ToppingButtonListener(CheckBox cb1, CheckBox cb2) {
        this.cb1 = cb1;
        this.cb2 = cb2;
    }

    public void onClick(Widget sender) {
        boolean unchecked = !cb1.isChecked() && !cb2.isChecked();
        cb1.setChecked(unchecked);
        cb2.setChecked(unchecked);
    }
}

这是EntryPoint.class:

/*
 * Copyright 2006 Google Inc.
 */

package com.google.gwt.core.client;

/**
 * Implement this interface to allow a class to act as a module entry point.
 * Please see the developer guide for more information on modules.
 */
public interface EntryPoint {

/**
 * The entry point method, called automatically by loading a module that
 * declares an implementing class as an entry-point.
 */
void onModuleLoad();
}

2 个答案:

答案 0 :(得分:1)

好的,这是工作代码(至少它的语法是正确的,我没有打扰它运行:))。也许它可以帮助您理解代码中缺少的内容。

package com.ibm.examples.client;

import java.util.ArrayList;
import java.util.Iterator;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Slicr implements EntryPoint {
    private DockPanel panel;
    private ArrayList<CheckBox> clearables;

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {
        clearables = new ArrayList<CheckBox>();
        initDockPanel();
        panel.add(buildActionPanel(), DockPanel.SOUTH);
        panel.add(buildPizzaTypePanel(), DockPanel.WEST);
        panel.add(buildToppingPanel(), DockPanel.EAST);
        RootPanel.get("slicr").add(panel);
    }

    private void initDockPanel() {
        panel = new DockPanel();
        panel.setBorderWidth(1);
        panel.setSpacing(5);
    }

    public HorizontalPanel buildActionPanel() {
        HorizontalPanel actions = new HorizontalPanel();
        actions.setSpacing(10);
        Button clear = new Button("Clear");
        clear.addClickListener(new ClearClickListener());
        Button newPizza = new Button("Another Pizza");
        Button submitOrder = new Button("Submit");
        actions.add(clear);
        actions.add(newPizza);
        actions.add(submitOrder);
        return actions;
    }

    public static final String[] PIZZA_TYPES = new String[] {
            "Thin Crust Medium", "Thin Crust Large", "Thin Crust X-Large",
            "Thick Crust Medium", "Thick Crust Large" };

    private VerticalPanel buildPizzaTypePanel() {
        VerticalPanel pizzaTypes = new VerticalPanel();
        HTML label = new HTML("<h2>Pizza</h2>");
        pizzaTypes.add(label);
        for (int i = 0; i < PIZZA_TYPES.length; i++) {
            RadioButton radio = new RadioButton("pizzaGroup", PIZZA_TYPES[i]);
            clearables.add(radio);
            pizzaTypes.add(radio);
        }
        return pizzaTypes;
    }

    public static final String[] TOPPINGS = new String[] { "Anchovy",
            "Gardineria", "Garlic", "Green Pepper", "Mushrooms", "Olives",
            "Onions", "Pepperoni", "Pineapple", "Sausage", "Spinach" };

    private VerticalPanel buildToppingPanel() {
        VerticalPanel toppings = new VerticalPanel();
        toppings.add(new HTML("<h2>Toppings</h2>"));
        Grid topGrid = new Grid(TOPPINGS.length + 1, 3);
        topGrid.setText(0, 0, "Topping");
        topGrid.setText(0, 1, "Left");
        topGrid.setText(0, 2, "Right");
        for (int i = 0; i < TOPPINGS.length; i++) {
            Button button = new Button(TOPPINGS[i]);
            CheckBox leftCheckBox = new CheckBox();
            CheckBox rightCheckBox = new CheckBox();
            clearables.add(leftCheckBox);
            clearables.add(rightCheckBox);
            button.addClickListener(new ToppingButtonListener(leftCheckBox,
                    rightCheckBox));
            topGrid.setWidget(i + 1, 0, button);
            topGrid.setWidget(i + 1, 1, leftCheckBox);
            topGrid.setWidget(i + 1, 2, rightCheckBox);
        }
        toppings.add(topGrid);
        return toppings;
    }

    private class ClearClickListener implements ClickListener {
        public void onClick(Widget sender) {
            for (Iterator iter = clearables.iterator(); iter.hasNext();) {
                CheckBox cb = (CheckBox) iter.next();
                cb.setChecked(false);
            }
        }
    }

    private class ToppingButtonListener implements ClickListener {

        private CheckBox cb1;
        private CheckBox cb2;

        public ToppingButtonListener(CheckBox cb1, CheckBox cb2) {
            this.cb1 = cb1;
            this.cb2 = cb2;
        }

        public void onClick(Widget sender) {
            boolean unchecked = !cb1.isChecked() && !cb2.isChecked();
            cb1.setChecked(unchecked);
            cb2.setChecked(unchecked);
        }
    }
}

注意一开始的所有进口 - 这些都是你所犯错误的主要原因。除此之外,clearables变量有点问题,我将其更改为通用ArrayList<CheckBox>以确保类型安全性。你还没有写过你正在使用哪个版本的GWT,但是在2.0上面的一些代码已被弃用(如ClickListener) - 值得研究的东西。如果你刚刚开始使用GWT,最好使用当前/推荐的方法,对吧?

PS:您不必发布EntryPoint界面的代码 - 它是GWT的一部分,每个人都拥有它;)
PPS:您使用的教程似乎已过时 - 您可能需要考虑切换到the official docs

答案 1 :(得分:0)

好的,开头的一般性评论:当你编写Java代码时,你编辑.java文件。这些.java文件包含您的Java类。编译.java文件后,它将成为.class文件。类文件可以由JVM运行。

因此,您需要将代码添加到slicr.java中的onModuleLoad(),因为这是您应用的入口点类。

如果要修复Eclipse中缺少的导入,请尝试按Ctrl-Shift-O。