2010-03-20 4 views
0

Я пытаюсь изучить AJAX через сайт this. Я добрался до раздела, где говорится: «Вы должны поместить код в onModuleLoad()» (прямо над листингом 4). В моем проекте Eclipse я обнаружил две области, которые упоминают onModuleLoad(): slicr.java и фактический файл EntryPoint.class в пакете gwt-user.jar/com.google.gwt.core.client. Когда я пытаюсь добавить содержимое листинга на slicr.java, я получаю, что тонны не могут быть разрешены к ошибкам типа, и я не могу добавить что-либо в EntryPoint.class, поскольку он, кажется, заблокирован от редактирования. Я очень ценю любую помощь, которую кто-то может мне дать!Ищете помощь с GWT/Derby в Eclipse

Вот код, у меня после добавления к 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(); 
} 

ответ

0

Хорошо, общее замечание, чтобы начать с: когда вы записывая Java-код, вы редактируете файлы .java. Эти .java-файлы содержат ваши Java-классы. После компиляции файла .java он становится .class-файлом. Файлы классов могут управляться JVM.

Итак, вам нужно добавить свой код в onModuleLoad() в slicr.java, так как это класс точки входа вашего приложения.

Если вы хотите исправить недостающий импорт в Eclipse, попробуйте нажать Ctrl-Shift-O.

+0

PS, если вы просто хотите изучить Ajax, то я не уверен, что GWT - лучшее место для начала, так как это требует изучения Java. Попробуйте использовать библиотеку JavaScript, например Prototype или JQuery. –

+0

Спасибо за ваш быстрый ответ! Хорошо, я сделал ctrl + shift + o после добавления кода в свой файл slicr.java. У меня все еще есть тонны «не могут быть разрешены к типу». К сожалению, я не могу использовать код C & P из-за отсутствия доступных символов для комментариев. Есть ли у вас другие предложения? – Ricky

+0

Кроме того, я просто использовал GWT для генерации основных файлов. Сейчас я работаю исключительно в Eclipse. – Ricky

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.

+0

Ничего себе, большое вам спасибо за вашу помощь. Это позволило решить многие из моих вопросов. Я все еще получаю некоторые компиляционные ошибки, такие как строка 24: тип ArrayList не является общим; он не может быть параметризован аргументами , но по крайней мере я могу с этим работать. Еще раз спасибо за вашу помощь! – Ricky