2014-02-13 3 views
3

iCalendar 형식을 기반으로하는 PC 프로그램을 만들고 있습니다. 현재 ics 파일에서 데이터를 가져 와서 캘린더 또는 적어도 캘린더와 비슷한 것으로 표시 할 수 있어야합니다. 데이터를 ics 파일에서 가져 오는 방법을 알기 때문에 단순히 해당 데이터를 표시 목적으로 쉽게 사용하는 방법을 알지 못합니다. 당신이 실제 GUI 또는 RRULE 속성 부여 상당히 복잡에서 iCalendar에서 날짜의 목록을 점점 의미하는 경우 확실하지ics 파일의 데이터를 사용하여 캘린더보기를 만드는 방법은 무엇입니까?

public void getCalendarData(File f) throws FileNotFoundException, IOException, ParserException 
{ 
    FileInputStream fin = new FileInputStream(f); 
    builder = new CalendarBuilder(); 
    calendar = builder.build(fin); 
} 
+1

같은 것을 당신은 이미 그 코드를 사용하고이 http://ical4j.sourceforge.net/introduction.html – Leo

+0

을 시도 할 수해야 할 것이다, 그러나 문제는 어떻게 Calendar 객체를 표시하려면, ics 파일에서 어떤 캘린더 스타일로 볼 수 있습니까? – Gedas

답변

4

한 가지가 ICS를 감싸는 유틸리티는 기본적으로 ical4j입니다 : THER 첫 번째 경우, 선택은 (HTML, ...)는 후자의 경우에 아래 복사 예 here이 활짝 열려있다 체재.

또 다른 것은 당신이 웹 인터페이스는 당신을 위해 OK 경우 사용할 수있는 우리 운, Primefaces 가진 좋은 JSF 컴포넌트있다,

:-) 달력/일정에 대한 프론트 엔드입니다하지만. 기본적으로

http://www.primefaces.org/showcase/ui/data/schedule.xhtml, 당신이 필요 단지 ICS에서 데이터를 구문 분석하고 primefaces 구성 요소 데이터 모델을 공급하는 것입니다 (링크 위의 JSF와 구성 요소를 사용하는 방법의 관리 빈의 예를 모두 가지고)

그래서 당신은 지금이

private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyyMMdd"); 

@PostConstruct 
private void loadIcs() { 
    eventModel = new DefaultScheduleModel(); 
    CalendarBuilder builder = new CalendarBuilder(); 

    try { 
     net.fortuna.ical4j.model.Calendar calendar = builder.build(this.getClass().getResourceAsStream("canada.ics")); 

     for (Iterator i = calendar.getComponents().iterator(); i.hasNext();) { 
      Component component = (Component) i.next(); 
      //new event 
      Date start = SDF.parse(component.getProperty("DTSTART").getValue()); 
      Date end = SDF.parse(component.getProperty("DTEND").getValue()); 
      String summary = component.getProperty("SUMMARY").getValue(); 

      eventModel.addEvent(new DefaultScheduleEvent(summary, 
      start, end)); 

      System.out.println("added "+start+end+summary); 

     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ParserException e) { 
     e.printStackTrace(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

} 
+0

내 응용 프로그램은 인터넷 또는 웹 기반 인터페이스를 사용하지 않습니다. 난 그냥 jFrame을 만들거나 jTable (또는 그와 비슷한 것)을 넣을 수 있고 그 테이블의 ics 파일에있는 모든 정보를 캘린더처럼 보이게 할 수 있기를 원한다. 내가 해결책을 찾을 수 없기 때문에 아마 그렇게 단순하지 않을 것이다. – Gedas

+1

일정에 대한 Java 데스크탑 GUI 구성 요소를 찾으면 이벤트를 추가 할 수있는 몇 가지 방법이 있으며 ical4j를 사용하여 이러한 이벤트를 추출 할 수 있으므로 필요한 일정 그래픽 구성 요소를 찾으려면 너의 요구. 예 : https://code.google.com/p/resource-schedule/ – Leo

+0

또는 http://www.migcalendar.com/ (이 방법이 더 멋지게 보임) – Leo

0

:

여기 내 시작 코드입니다.

// Reading the file and creating the calendar 
CalendarBuilder builder = new CalendarBuilder(); 
Calendar cal = null; 
try { 
    cal = builder.build(new FileInputStream("my.ics")); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (ParserException e) { 
    e.printStackTrace(); 
} 


// Create the date range which is desired. 
DateTime from = new DateTime("20100101T070000Z"); 
DateTime to = new DateTime("20100201T070000Z");; 
Period period = new Period(from, to); 


// For each VEVENT in the ICS 
for (Object o : cal.getComponents("VEVENT")) { 
    Component c = (Component)o; 
    PeriodList list = c.calculateRecurrenceSet(period); 

    for (Object po : list) { 
     System.out.println((Period)po); 
    } 
} 
+0

이 방법은 어떤 경우에는 유용 ​​할 것이라고 생각하지만 달력으로 표시된 모든 날짜의 GUI를 만드는 방법을 찾으려고했습니다. 예를 들어 my.ics 파일에 일부 이벤트를 추가하고 이번 달에 해당 이벤트의 위치를보고 싶습니다. 일반적인 캘린더와 같습니다. – Gedas

관련 문제