ȯ°æ ¼³Á¤

Workbench´Â Ç÷¯±×ÀÎÀÌ »ç¿ëÀÚ È¯°æ ¼³Á¤ °ªÀ» ÀúÀåÇϰí Workbench ȯ°æ ¼³Á¤ ´ëÈ­ »óÀÚ¿¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Á¦°øÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀÏ¹Ý È¯°æ ¼³Á¤ ¾ÆÅ°ÅØÃ³¸¦ ±¸ÇöÇÕ´Ï´Ù. Readme µµ±¸ ¿¹¿¡¼­ À̰ÍÀÌ ¼öÇàµÇ´Â ¹æ¹ýÀ» ´Ù½Ã »ìÆì º¸°í ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ºôµåÇϱâ À§ÇÑ ¸î °¡Áö ±âº» Áö¿øÀ» »ìÆì º¸°Ú½À´Ï´Ù.

org.eclipse.ui.preferencePages

org.eclipse.ui.preferencePages È®ÀåÁ¡À» »ç¿ëÇϸé Workbench ȯ°æ ¼³Á¤(â->ȯ°æ ¼³Á¤) ´ëÈ­ »óÀÚ¿¡ ÆäÀÌÁö¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ȯ°æ ¼³Á¤ ´ëÈ­ »óÀÚ´Â »ç¿ëÀÚ È¯°æ ¼³Á¤ Ç׸ñ¿¡ ´ëÇÑ °èÃþ ±¸Á¶ ¸ñ·ÏÀ» Á¦°øÇÕ´Ï´Ù. °¢ Ç׸ñÀ» ¼±ÅÃÇϸé ÇØ´ç ȯ°æ ¼³Á¤ ÆäÀÌÁö°¡ Ç¥½ÃµË´Ï´Ù.

Readme µµ±¸´Â ÀÌ È®ÀåÁ¡ Á¤ÀǸ¦ »ç¿ëÇÏ¿© Readme Example ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Ãß°¡ÇÕ´Ï´Ù.

<extension
    point = "org.eclipse.ui.preferencePages">
    <page 
        id="org.eclipse.ui.examples.readmetool.Page1"
        class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage"
        name="Readme Example">
    </page>
</extension>

ÀÌ ¸¶Å©¾÷Àº ReadmePreferencePage Ŭ·¡½º¿¡ ÀÇÇØ ±¸ÇöµÇ´Â "Readme Example"À̶ó´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ Á¤ÀÇÇÕ´Ï´Ù. ÀÌ Å¬·¡½º´Â IWorkbenchPreferencePage ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

Workbench´Â PreferenceManager¸¦ »ç¿ëÇÏ¿© ȯ°æ ¼³Á¤ Æ®¸® ¹× ÇØ´ç ÆäÀÌÁö¿¡ ¸ðµç ³ëµå ¸ñ·ÏÀ» º¸°üÇÕ´Ï´Ù. Ç÷¯±×ÀÎ Äڵ带 ½ÇÇàÇÏÁö ¾Ê°í Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®ÀÇ Á¤º¸·ÎºÎÅÍ ÀÌ ¸ñ·ÏÀ» ÃʱâÈ­ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ȯ°æ ¼³Á¤ ´ëÈ­ »óÀÚ¿¡ ´ëÇÑ Ç÷¯±×ÀÎÀÇ Áö½Ã¹®(¿ÞÂÊÀÇ "Readme Example" Ç׸ñ)Àº Äڵ尡 ½ÇÇàµÇ±â Àü¿¡ Ç¥½ÃµË´Ï´Ù.

"Readme Example" ȯ°æ ¼³Á¤Àº ¿ÞÂÊ¿¡ Àִ ȯ°æ ¼³Á¤ Æ®¸®ÀÇ ¸Ç À§ ·¹º§¿¡ Ãß°¡µË´Ï´Ù.  ±× ÀÌÀ¯´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö Áö½Ã¹®ÀÌ Ä«Å×°í¸® ¼Ó¼ºÀÌ ÁöÁ¤µÈ °æ¿ì¸¦ Á¦¿ÜÇÏ°í Æ®¸®ÀÇ ·çÆ®·Î Ãß°¡µÇ±â ¶§¹®ÀÔ´Ï´Ù. (Ä«Å×°í¸®¶ó´Â À̸§Àº ´Ù¼Ò ¿ÀÇØÇϱ⠽±½À´Ï´Ù. °æ·Î°¡ ´õ ÀûÇÕÇÑ À̸§ÀÔ´Ï´Ù.) Ä«Å×°í¸® ¼Ó¼ºÀº »óÀ§ ÆäÀÌÁöÀÇ ID(¶Ç´Â ·çÆ®¿¡¼­ IDÀÇ ¼ø¼­)¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸¶Å©¾÷Àº "Readme Example Child Page"¶ó´Â µÎ ¹øÂ° Readme µµ±¸ ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ¿ø·¡ ÆäÀÌÁöÀÇ ÇÏÀ§ ÆäÀÌÁö·Î ÀÛ¼ºÇÕ´Ï´Ù.

<extension
    point = "org.eclipse.ui.preferencePages">
    <page 
        id="org.eclipse.ui.examples.readmetool.Page1"
        class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage"
        name="Readme Example">
    </page>    
    <page 
        id="org.eclipse.ui.examples.readmetool.Page2"
        class="org.eclipse.ui.examples.readmetool.ReadmePreferencePage2"
        name="Readme Example Child Page"
        category="org.eclipse.ui.examples.readmetool.Page1>
    </page>
</extension>

»ç¿ëÀÚ°¡ ¿ÞÂÊÀÇ Æ®¸®¿¡¼­ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡ Ç׸ñÀ» ¼±ÅÃÇϸé Workbench°¡ È®Àå Á¤ÀÇ¿¡ ÁöÁ¤µÈ Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ȯ°æ ¼³Á¤ ÆäÀÌÁö¸¦ ÀÛ¼ºÇÏ¿© Ç¥½ÃÇÕ´Ï´Ù.  ÀÌ Á¶Ä¡´Â Ç÷¯±×ÀÎÀ» Ȱ¼ºÈ­(´Ù¸¥ »ç¿ëÀÚ Á¶ÀÛÀ¸·Î ÀÎÇØ ¾ÆÁ÷ Ȱ¼ºÈ­µÇÁö ¾ÊÀº °æ¿ì)ÇÕ´Ï´Ù.

ȯ°æ ¼³Á¤ ÆäÀÌÁö

ÆäÀÌÁö Á¤ÀÇ

ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ±¸ÇöÀº ¸¶¹ý»ç ÆäÀÌÁö ÀÛ¼º°ú À¯»çÇÕ´Ï´Ù. ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ÆäÀÌÁö ÄÁÅÙÃ÷¸¦ Ç¥½ÃÇÏ´Â SWT Á¦¾î¸¦ ÀÛ¼ºÇÏ°í °ü½É ÀÖ´Â À̺¥Æ®¿¡ ¸®½º³Ê¸¦ Ãß°¡ÇÏ´Â createContents ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. ¶ÇÇÑ È¯°æ ¼³Á¤ ÆäÀÌÁö´Â ÆäÀÌÁöÀÇ ¸ðµç Á¦¾î¸¦ »óÀ§·Î ÇÒ º¹ÇÕÀ» ÀÛ¼ºÇÏ¿© ¸®ÅÏÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.  ´ÙÀ½ ½º´ÏÆêÀº °­Á¶¸¦ Ç¥½ÃÇÕ´Ï´Ù.

protected Control createContents(Composite parent)
{
    ...
    //composite_textField << parent
    Composite composite_textField = createComposite(parent, 2);
    Label label_textField = createLabel(composite_textField, "Text Field"); 
    textField = createTextField(composite_textField);
    pushButton_textField = createPushButton(composite_textField, "Change");

    //composite_tab << parent
    Composite composite_tab = createComposite(parent, 2);
    Label label1 = createLabel(composite_tab, "Radio Button Options");

    tabForward(composite_tab);
    //´ÜÀÏ ¼±Åà ´ÜÃß º¹ÇÕ << ÅÇ º¹ÇÕ
    Composite composite_radioButton = createComposite(composite_tab, 1);
    radioButton1 = createRadioButton(composite_radioButton, "Radio button 1");
    radioButton2 = createRadioButton(composite_radioButton, "Radio button 2");
    radioButton3 = createRadioButton(composite_radioButton, "Radio button 3");
    ...
    initializeValues();
    ...
    return new Composite(parent, SWT.NULL);
}

ÀÌ ¸Þ¼Òµå¿¡¼­ ´ëºÎºÐÀÇ ÄÚµå´Â Á¦¾î¸¦ ÀÛ¼ºÇÏ¿© ·¹À̾ƿôÇÏ´Â ¿ªÇÒÀ» ÇϹǷΠ¿©±â¼­´Â ÀÌ¿¡ ´ëÇØ¼­´Â ¼³¸íÇÏÁö ¾Ê½À´Ï´Ù.  ÇØ´ç ÆäÀÌÁö´Â ´ÙÀ½°ú °°½À´Ï´Ù.

ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ´Ù¸¥ ÁÖ¿ä ¿ªÇÒÀº performOk ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÏ´Â °ÍÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÌ ¸Þ¼Òµå´Â »ç¿ëÀÚ È¯°æ ¼³Á¤À» °»½ÅÇÏ¿© ÀúÀåÇϸç, ÇÊ¿äÇÏ¸é ´Ù¸¥ Ç÷¯±×ÀÎ ¿ÀºêÁ§Æ®¸¦ °»½ÅÇÏ¿© ȯ°æ ¼³Á¤ º¯°æ»çÇ×À» ¹Ý¿µÇÕ´Ï´Ù.

ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â doGetPreferenceStore() ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© °ªÀ» ÀúÀåÇϱâ À§ÇØ È¯°æ ¼³Á¤ ÀúÀåÀ» ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù.

Ç÷¯±×ÀΠȯ°æ ¼³Á¤ ÀúÀå

ȯ°æ ¼³Á¤ ÀúÀåÀº º»ÁúÀûÀ¸·Î ´ëÈ­ »óÀÚ ¼³Á¤°ú À¯»çÇÕ´Ï´Ù. ´ëÈ­ »óÀÚ ¼³Á¤¿¡¼­ AbstractUIPlugin Ŭ·¡½º°¡ Ç÷¯±×ÀÎ Áö¼Ó½Ã°£ µ¿¾È ´ëÈ­ »óÀÚ ¼³Á¤À» À¯Áöº¸¼öÇÏ´Â ¹æ¹ýÀ» »ìÆì º¸¾Ò½À´Ï´Ù. »ç¿ëÀÚ È¯°æ ¼³Á¤¿¡µµ µ¿ÀÏÇÑ °èȹÀÌ »ç¿ëµË´Ï´Ù. Ç÷¯±×ÀÎÀº ȯ°æ ¼³Á¤ ÀúÀå¿¡ Ç׸ñÀ» Ãß°¡ÇÏ°í »ç¿ëÀÚ°¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡¼­ ¼³Á¤À» º¯°æÇÒ ¶§ °ªÀ» °»½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷§ÆûÀº Ç÷¯±×ÀÎÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡ ÀÌ °ªÀ» ÀúÀåÇϰí ÀúÀåµÈ ¼³Á¤¿¡¼­ ȯ°æ ¼³Á¤ ÀúÀåÀ» ÃʱâÈ­ÇÕ´Ï´Ù.

ReadmePreferencePageÀÇ ´ÙÀ½ ÄÚµå´Â ReadmePlugin¿¡ ´ëÇÑ È¯°æ ¼³Á¤ ÀúÀåÀ» ¾ò½À´Ï´Ù.

protected IPreferenceStore doGetPreferenceStore() {

 return ReadmePlugin.getDefault().getPreferenceStore();

}

ReadmePluginÀÌ AbstractUIPlugin Ŭ·¡½º¸¦ È®ÀåÇϱ⠶§¹®¿¡ ȯ°æ ¼³Á¤ ÀúÀåÀ» ÀÚµ¿À¸·Î »ó¼ÓÇÕ´Ï´Ù. ÀÌ È¯°æ ¼³Á¤ ÀúÀåÀº Ç÷¯±×ÀÎÀÇ µð·ºÅ丮¿¡ ÀúÀåµÈ ȯ°æ ¼³Á¤ ÆÄÀÏ¿¡¼­ ÃʱâÈ­µË´Ï´Ù.  ReadmePluginÀÌ ¼öÇàÇØ¾ß ÇÒ À¯ÀÏÇÑ ÀÛ¾÷Àº ȯ°æ ¼³Á¤À» ±âº»°ªÀ¸·Î ÃʱâÈ­ÇÏ´Â ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ °ªÀº ȯ°æ ¼³Á¤ÀÌ Ã³À½ Ç¥½ÃµÉ ¶§ ¶Ç´Â »ç¿ëÀÚ°¡ ȯ°æ ¼³Á¤ ÆäÀÌÁö¿¡¼­ ±âº»°ª ´ÜÃ߸¦ ´©¸£¸é »ç¿ëµË´Ï´Ù.

protected void initializeDefaultPreferences(IPreferenceStore store) {

 // These settings will show up when Preference dialog

 // opens up for the first time.

 store.setDefault(IReadmeConstants.PRE_CHECK1, true);

 store.setDefault(IReadmeConstants.PRE_CHECK2, true);

 store.setDefault(IReadmeConstants.PRE_CHECK3, false);

 store.setDefault(IReadmeConstants.PRE_RADIO_CHOICE, 2);

 store.setDefault(IReadmeConstants.PRE_TEXT, "Default text");

}

Âü°í: Ç÷¯±×Àο¡ ÀúÀåµÈ ȯ°æ ¼³Á¤ÀÌ ¾ø´Â °æ¿ì, Ç÷¯±×ÀÎÀº ºó ȯ°æ ¼³Á¤ ÀúÀåÀ» °¡Á®¿É´Ï´Ù.

ȯ°æ ¼³Á¤ °Ë»ö ¹× ÀúÀå

Ç÷¯±×ÀÎÀÇ È¯°æ ¼³Á¤À» ȯ°æ ¼³Á¤ ÆäÀÌÁö¿Í ¿¬°ü½ÃÄ×À¸¸é ȯ°æ ¼³Á¤À» °Ë»öÇϰí ÀúÀåÇϱâ À§ÇÑ ³í¸®¸¦ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.

ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ȯ°æ ¼³Á¤ ÀúÀåÀÇ È¯°æ ¼³Á¤À» »ç¿ëÇÏ¿© Á¦¾î °ªÀ» ÃʱâÈ­ÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ´ëÈ­ »óÀÚ ¼³Á¤¿¡¼­ ´ëÈ­ »óÀÚ Á¦¾î°ªÀ» ÃʱâÈ­ÇÏ´Â °Í°ú À¯»çÇÕ´Ï´Ù. ReadmePreferencePage´Â ¸ðµç Á¦¾î¸¦ ÇϳªÀÇ ¸Þ¼Òµå(initializeValues)·Î ÃʱâÈ­Çϴµ¥, ÀÌ ¸Þ¼Òµå´Â createContents ¸Þ¼Òµå¿¡¼­ È£ÃâµË´Ï´Ù.

private void initializeValues() {

 IPreferenceStore store = getPreferenceStore();

 checkBox1.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK1));

 checkBox2.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK2));

 checkBox3.setSelection(store.getBoolean(IReadmeConstants.PRE_CHECK3));
 ...

È®ÀÎ(¶Ç´Â Àû¿ë) ´ÜÃ߸¦ ´©¸£¸é ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ ÇöÀç Á¦¾î°¡ ´Ù½Ã ȯ°æ ¼³Á¤ ÀúÀå¿¡ ÀúÀåµË´Ï´Ù. ReadmePreferencePage´Â ÀÌ ³í¸®¸¦ µ¶¸³ ¸Þ¼ÒµåÀÎ storeValues¿¡¼­ ±¸ÇöÇÕ´Ï´Ù.

private void storeValues() {

 IPreferenceStore store = getPreferenceStore();

 store.setValue(IReadmeConstants.PRE_CHECK1, checkBox1.getSelection());

 store.setValue(IReadmeConstants.PRE_CHECK2, checkBox2.getSelection());

 store.setValue(IReadmeConstants.PRE_CHECK3, checkBox3.getSelection());

 ...

}

»ç¿ëÀÚ°¡ ±âº»°ª ´ÜÃ߸¦ ´©¸£¸é Ç÷§ÆûÀÌ ¸ðµç ȯ°æ ¼³Á¤ ÀúÀå °ªÀ» Ç÷¯±×ÀΠŬ·¡½º¿¡ ÁöÁ¤µÈ ±âº»°ªÀ¸·Î º¹¿øÇÕ´Ï´Ù. ±×·¯³ª ȯ°æ ¼³Á¤ ÆäÀÌÁö´Â ȯ°æ ¼³Á¤ ÆäÀÌÁöÀÇ Á¦¾î¿¡ ÀÌ ±âº»°ªÀ» ¹Ý¿µÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ReadmePreferencePage´Â À̰ÍÀ» initializeDefaults·Î ±¸ÇöÇÕ´Ï´Ù.

private void initializeDefaults() {

 IPreferenceStore store = getPreferenceStore();

 checkBox1.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK1));

 checkBox2.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK2));

 checkBox3.setSelection(store.getDefaultBoolean(IReadmeConstants.PRE_CHECK3));

 ...

}

ÇÊµå ÆíÁý±â

ȯ°æ ¼³Á¤ ÆäÀÌÁö ±¸ÇöÀº ÁÖ·Î SWT ÄÚµåÀÔ´Ï´Ù.  SWT ÄÚµå´Â ȯ°æ ¼³Á¤ ÆäÀÌÁö Á¦¾î¸¦ ÀÛ¼ºÇϰí, Á¦¾î °ªÀ» ¼³Á¤ÇÏ°í °Ë»öÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. org.eclipse.jface.preference ÆÐŰÁö´Â À§ÁöÆ®(widget)¸¦ ÀÛ¼ºÇÏ°í °ª ¼³Á¤À» ±¸ÇöÇÏ°í °¡Àå ÀϹÝÀûÀΠȯ°æ ¼³Á¤ À¯Çü Äڵ带 °Ë»öÇÏ´Â ÇÊµå ÆíÁý±â¶ó´Â ÇïÆÛ Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. Ç÷§ÆûÀº ºÎ¿ï, »ö»ó, ¹®ÀÚ¿­, Á¤¼ö, ±Û²Ã, ÆÄÀÏ À̸§À» Æ÷ÇÔÇÏ¿© ¿©·¯ °¡Áö °ªÀÇ À¯ÇüÀ» Ç¥½ÃÇÏ°í °»½ÅÇϱâ À§ÇÑ ÇÊµå ÆíÁý±â¸¦ Á¦°øÇÕ´Ï´Ù.

FieldEditorPreferencePage´Â ÀÌ ÇÊµå ÆíÁý±â¸¦ »ç¿ëÇÏ¿© ÆäÀÌÁö¿¡ ȯ°æ ¼³Á¤ °ªÀ» Ç¥½ÃÇϰí ÀúÀåÇÏ´Â ÆäÀÌÁö¸¦ ±¸ÇöÇÕ´Ï´Ù.

FieldEditorPreferencePage´Â ÄÁÅÙÃ÷¸¦ ä¿ì±â À§ÇØ SWT Á¦¾î¸¦ ÀÛ¼ºÇÏ´Â ´ë½Å ÇÊµå ÆíÁý±â¸¦ ÀÛ¼ºÇÏ¿© ÄÁÅÙÃ÷¸¦ Ç¥½ÃÇÕ´Ï´Ù.

public void createFieldEditors() {

    // The first string is the preference key name
    // The second string is the label shown next to the widget 
    addField(new BooleanFieldEditor(USE_OLD_MODE, "Use old mode",
        getFieldEditorParent()));

    addField(new StringFieldEditor(APPLICATION_NAME, "Application Name",
        getFieldEditorParent()));

    addField(new ColorFieldEditor(COLOR, "Text Color", getFieldEditorParent()));
    ...

°¢ ÇÊµå ÆíÁý±â¿¡´Â ´ëÀÀÇϴ ȯ°æ ¼³Á¤ ŰÀÇ À̸§°ú ÇÊµå ÆíÁý±â°¡ ÀÛ¼ºÇÒ SWT Á¦¾î¿¡ ´ëÇÑ ÅØ½ºÆ® ·¹À̺íÀÌ ÁöÁ¤µË´Ï´Ù. ÀÛ¼ºµÇ´Â Á¦¾î À¯ÇüÀº ÇÊµå ÆíÁý±â À¯Çü¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ¿¹¸¦ µé¾î, ºÎ¿ï ÇÊµå ÆíÁý±â´Â ¼±ÅöõÀ» ÀÛ¼ºÇÕ´Ï´Ù.

ȯ°æ ¼³Á¤ ÆäÀÌÁö°¡ ȯ°æ ¼³Á¤ ÀúÀå( doGetPreferenceStore ¸Þ¼Òµå¿¡ ÁöÁ¤)°ú ¿¬°üµÇ±â ¶§¹®¿¡ ÇöÀç °ªÀ» ÀúÀåÇϰí ȯ°æ ¼³Á¤ ÀúÀåÀ¸·ÎºÎÅÍ Á¦¾î °ªÀ» ÃʱâÈ­Çϸç Á¦¾î¸¦ ±âº»°ªÀ¸·Î º¹¿øÇϱâ À§ÇÑ Äڵ尡 ¸ðµÎ FieldEditorPreferencePage¿¡¼­ ±¸ÇöµÉ ¼ö ÀÖ½À´Ï´Ù.

FieldEditorPreferencePage´Â ¿­ÀÌ ÇϳªÀÎ °ÝÀÚ ·¹À̾ƿôÀ» ÇÊµå ÆíÁý±â À§ÁöÆ®(widget)¿¡ ´ëÇÑ ±âº» ·¹À̾ƿôÀ¸·Î »ç¿ëÇÕ´Ï´Ù.  Ư¼ö ·¹À̾ƿô ¿ä±¸»çÇ×ÀÇ °æ¿ì, createContents ¸Þ¼Òµå¸¦ ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.