2014-02-11 4 views
0

Я хотел бы реализовать график временной шкалы gwt.gwt Визуализация: временная шкала

Но его невозможно использовать в gwt, можно ли использовать визуализацию api (javascript) непосредственно в приложении gwt.

Если да, пожалуйста, дайте мне руководство.

Есть ли другой вариант для этого.

Я пробовал http://almende.github.io/chap-links-library/timeline.html и его хорошо.

Но, я хотел знать о визуализации api в gwt.

+0

Вы можете использовать любую библиотеку JavaScript - или родной JavaScript - в GWT. –

ответ

0

Я не знаю ваших требований, но это project предлагает диаграмму Ганта в GWT

0

Я нашел это ...

http://almende.github.io/chap-links-library/gwt/files/examples/TimelineDemo4_offline.zip

Я попробовал это, и это работает !! !

Ниже основного кода, который нужно

/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class TimelineDemo4_offline implements EntryPoint { 
    final TextBox txtStartDate = new TextBox(); 
    final TextBox txtEndDate = new TextBox(); 
    final Button btnSetRange = new Button("Set"); 
    final CheckBox chkConfirmChange = new CheckBox("Confirm changes"); 

    Timeline timeline = null; 
    JSONArray data = new JSONArray(); 

    /** 
    * This is the entry point method. 
    */ 
    public void onModuleLoad() { 
     RootPanel.get("txtStartDate").add(txtStartDate); 
     RootPanel.get("txtEndDate").add(txtEndDate); 
     RootPanel.get("btnSetRange").add(btnSetRange); 
     RootPanel.get("chkConfirmChange").add(chkConfirmChange); 

     // Add a handler to the add button 
     btnSetRange.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       setRange(); 
      } 
     }); 

     data = createData(); 

     Timeline.Options options = Timeline.Options.create(); 
     options.setWidth("100%"); 
     options.setHeight("300px"); 
     options.setStyle(Timeline.Options.STYLE.BOX); 
     options.setEditable(true); 

     // create the timeline, with data and options 
     timeline = new Timeline(data.getJavaScriptObject(), options); 

     // add event handlers 
     timeline.addSelectHandler(createSelectHandler(timeline)); 
     timeline.addRangeChangeHandler(createRangeChangeHandler(timeline)); 
     timeline.addChangeHandler(createChangeHandler(timeline)); 
     timeline.addAddHandler(createAddHandler(timeline)); 
     timeline.addEditHandler(createEditHandler(timeline)); 
     timeline.addDeleteHandler(createDeleteHandler(timeline)); 

     RootPanel.get("mytimeline").add(timeline); 

     getRange(); 
    } 

    DateTimeFormat df = DateTimeFormat.getFormat("yyyy-MM-dd"); 
    private long dateToLong(String date) { 
     return df.parse(date).getTime(); 
    } 

    DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss"); 
    private long datetimeToLong(String datetime) { 
     return dtf.parse(datetime).getTime(); 
    } 

    /** 
    * Returns a table filled with data 
    * @return data 
    */ 
    private JSONArray createData() { 
     JSONArray data = new JSONArray(); 
     JSONObject item; 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(dateToLong("2010-08-23"))); 
     item.put("content", new JSONString("<div>Conversation</div><img src='img/comments-icon.png' style='width:32px; height:32px;'>")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(datetimeToLong("2010-08-23 23:00:00"))); 
     item.put("content", new JSONString("<div>Mail from boss</div><img src='img/mail-icon.png' style='width:32px; height:32px;'>")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(datetimeToLong("2010-08-24 16:00:00"))); 
     item.put("content", new JSONString("Report")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(dateToLong("2010-08-26"))); 
     item.put("end", new JSONNumber(dateToLong("2010-09-02"))); 
     item.put("content", new JSONString("Traject A")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(dateToLong("2010-08-28"))); 
     item.put("content", new JSONString("<div>Memo</div><img src='img/notes-edit-icon.png' style='width:48px; height:48px;'>")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(dateToLong("2010-08-29"))); 
     item.put("content", new JSONString("<div>Phone call</div><img src='img/Hardware-Mobile-Phone-icon.png' style='width:32px; height:32px;'>")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(dateToLong("2010-08-31"))); 
     item.put("end", new JSONNumber(dateToLong("2010-09-03"))); 
     item.put("content", new JSONString("Traject B")); 
     data.set(data.size(), item); 

     item = new JSONObject(); 
     item.put("start", new JSONNumber(datetimeToLong("2010-09-04 12:00:00"))); 
     item.put("content", new JSONString("<div>Report</div><img src='img/attachment-icon.png' style='width:32px; height:32px;'>")); 
     data.set(data.size(), item); 

     return data; 
    } 

    /** 
    * Get the range from the timeline and put it in the textboxes on screen 
    */ 
    private void getRange() { 
     Timeline.DateRange range = timeline.getVisibleChartRange(); 
     DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss"); 

     // set the new startdate and enddate 
     txtStartDate.setText(dtf.format(range.getStart())); 
     txtEndDate.setText(dtf.format(range.getEnd())); 
    } 

    /** 
    * Get the entered dates from the textboxes on screen, and apply them to 
    * the timeline 
    */ 
    private void setRange() { 
     DateTimeFormat datetime = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss"); 
     DateTimeFormat date = DateTimeFormat.getFormat("yyyy-MM-dd"); 

     Date startDate; 
     Date endDate; 

     // Try to parse the startdate 
     try { 
      startDate = datetime.parse(txtStartDate.getText()); 
     } catch (IllegalArgumentException err) { 
      try { 
       startDate = date.parse(txtStartDate.getText()); 
      } catch (IllegalArgumentException err2) { 
       Window.alert("I don't understand the startdate that you entered :("); 
       return; 
      } 
     } 

     // Try to parse the enddate 
     try { 
      endDate = datetime.parse(txtEndDate.getText()); 
     } catch (IllegalArgumentException err) { 
      try { 
       endDate = date.parse(txtEndDate.getText()); 
      } catch (IllegalArgumentException err2) { 
       Window.alert("I cannot make sense of the enddate that you entered :("); 
       return; 
      } 
     } 

     timeline.setVisibleChartRange(startDate, endDate); 
     timeline.redraw(); 
    } 

    /** 
    * add a select handler (the select event occurs when the user clicks on an 
    * event) 
    * @param timeline 
    * @return 
    */ 
    private SelectHandler createSelectHandler(final Timeline timeline) { 
     return new SelectHandler() { 
      @Override 
      public void onSelect(SelectEvent event) { 
       JsArray<Selection> sel = timeline.getSelections(); 

       if (sel.length() > 0) { 
        int row = sel.get(0).getRow(); 
        String info = "Selected event " + String.valueOf(row); 
        RootPanel.get("lblInfo").add(new Label(info)); 
       } else { 
        String info = "Select event &lt;nothing&gt; selected"; 
        RootPanel.get("lblInfo").add(new Label(info)); 
       } 
      } 
     }; 
    }  

    /** 
    * create a RangeChange handler (this event occurs when the user changes the 
    * visible range by moving or scrolling the Timeline). 
    * @param timeline 
    * @return 
    */ 
    private RangeChangeHandler createRangeChangeHandler(final Timeline timeline) { 
     return new RangeChangeHandler() { 
      @Override 
      public void onRangeChange(RangeChangeEvent event) { 
       getRange();  
      } 
     }; 
    } 

    /** 
    * create a change handler (this event occurs when the user changes 
    * the position of an event by dragging it). 
    * @param timeline 
    * @return 
    */ 
    private ChangeHandler createChangeHandler(final Timeline timeline) { 
     return new ChangeHandler() { 
      @Override 
      public void onChange(ChangeEvent event) { 
       // retrieve the row number of the changed event 
       JsArray<Selection> sel = timeline.getSelections(); 
       if (sel.length() > 0) { 
        int row = sel.get(0).getRow(); 

        boolean confirmChanges = chkConfirmChange.getValue(); 

        // request confirmation 
        boolean applyChange = confirmChanges ? 
          Window.confirm("Are you sure you want to change this event?") : 
           true; 

          if (applyChange) { 
           String info = "Changed event " + String.valueOf(row); 
           RootPanel.get("lblInfo").add(new Label(info)); 
          } else { 
           // cancel the change 
           timeline.cancelChange(); 

           String info = "Change event " + String.valueOf(row) + " cancelled"; 
           RootPanel.get("lblInfo").add(new Label(info)); 
          } 
       } 
      } 
     }; 
    } 



    /** 
    * create an add handler (this event occurs when the user creates a new 
    * event). 
    * @param timeline 
    * @return 
    */ 
    private AddHandler createAddHandler(final Timeline timeline) { 
     return new AddHandler() { 
      @Override 
      public void onAdd(AddEvent event) { 
       // retrieve the row number of the changed event 
       JsArray<Selection> sel = timeline.getSelections(); 
       if (sel.length() > 0) { 
        int row = sel.get(0).getRow(); 

        // request confirmation 
        String title = 
         Window.prompt("Enter a title for the new event", "New event"); 

        if (title != null) { 
         // apply the new title 
         JSONValue value = data.get(row); 
         if (value != null && value.isObject() != null) { 
          JSONObject item = value.isObject(); 

          item.put("content", new JSONString(title)); 
          timeline.setData(data.getJavaScriptObject()); 

          String info = "Added event " + String.valueOf(row); 
          RootPanel.get("lblInfo").add(new Label(info)); 
         } 

        } 
        else { 
         // cancel creating new event 
         timeline.cancelAdd(); 
         String info = "Add event " + String.valueOf(row) + " cancelled"; 
         RootPanel.get("lblInfo").add(new Label(info));    
        } 
       } 
      } 
     }; 
    } 



    /** 
    * create an edit handler (this event occurs when the user double clicks an 
    * event). 
    * @param timeline 
    * @return 
    */ 
    private EditHandler createEditHandler(final Timeline timeline) { 
     return new EditHandler() { 
      @Override 
      public void onEdit(EditEvent event) { 
       // retrieve the row number of the changed event 
       JsArray<Selection> sel = timeline.getSelections(); 
       if (sel.length() > 0) { 
        int row = sel.get(0).getRow(); 
        JSONValue value = data.get(row); 
        if (value != null && value.isObject() != null) { 
         JSONObject item = value.isObject(); 
         String content = ""; 
         if (item.get("content") != null && 
           item.get("content").isString() != null) { 
          content = item.get("content").isString().stringValue(); 
         } 

         // request new title 
         String title = 
          Window.prompt("Change the title of this event", 
            content); 

         if (title != null) { 
          // apply the new title 
          item.put("content", new JSONString(title)); 
          timeline.setData(data.getJavaScriptObject()); 

          String info = "Edited event " + String.valueOf(row); 
          RootPanel.get("lblInfo").add(new Label(info)); 
         } 
         else { 
          // do nothing 
          String info = "Edit event " + String.valueOf(row) + " cancelled"; 
          RootPanel.get("lblInfo").add(new Label(info));    
         } 
        } 
       } 
      } 
     }; 
    } 

    /** 
    * create an delete handler (this event occurs when the user creates a new 
    * event). 
    * @param timeline 
    * @return 
    */ 
    private DeleteHandler createDeleteHandler(final Timeline timeline) { 
     return new DeleteHandler() { 
      @Override 
      public void onDelete(DeleteEvent event) { 
       // retrieve the row number of the changed event 
       JsArray<Selection> sel = timeline.getSelections(); 
       if (sel.length() > 0) { 
        int row = sel.get(0).getRow(); 

        boolean confirmChanges = chkConfirmChange.getValue(); 

        if (confirmChanges == false) { 
         String info = "Deleting event " + String.valueOf(row); 
         RootPanel.get("lblInfo").add(new Label(info)); 
         return; 
        } 

        // request confirmation 
        boolean applyDelete = confirmChanges ? 
          Window.confirm("Are you sure you want to delete this event?") : 
           true; 

          if (applyDelete) { 
           String info = "Deleted " + String.valueOf(row); 
           RootPanel.get("lblInfo").add(new Label(info)); 
          } else { 
           // cancel the deletion 
           timeline.cancelDelete(); 

           String info = "Deleting event " + String.valueOf(row) + " cancelled"; 
           RootPanel.get("lblInfo").add(new Label(info)); 
          }   
       } 
      } 
     }; 
    } 
} 
Смежные вопросы