2017-02-12 4 views
1

私はSWT GUI開発の初心者です。私はEclipseプラグインの開発にSWTを使用しています。基本的には、2つのラジオ・オプション・グループと2つ目のラジオ・オプション・グループの下にあるテキスト・ボックスが必要でした。以下のようなものです。FormCayExceptionをFormLayoutに配置するとき

Heading1 
    . A radio button 
    . B radio button 
    Heading2 
    . C radio button 
    . D radio button 
    Textbox1 Textbox2 Textbox3 

Iが互いに対してそれらのテキストボックスを必要とするので、私は、FormLayoutを統合を用います。

によって引き起こさ:java.lang.ClassCastExceptionが:しかし、それは私に例外を与えるorg.eclipse.swt.layout.FormDataは*

org.eclipse.swt.layout.GridDataにキャストすることはできませんしかし、私はGridDataを使用していません。 例外は129行目で発生します。 Textbox1を基準にTextbox2を追加できません。私のコードは以下のとおりです。

 Shell sh = new Shell(parent_shell,SWT.PRIMARY_MODAL | SWT.TRAIL | SWT.CASCADE); 
     System.out.println("execute"); 
     FormLayout fL = new FormLayout(); 
     sh.setLayout(fL); 
     sh.setText("Configure"); 

     sh.setSize(330,300); 
     sh.setActive(); 

     Composite composite = new Composite(sh, SWT.NONE); 
     GridLayout layout = new GridLayout(); 
     layout.marginWidth = 0; 
     layout.marginHeight = 0; 
     composite.setLayout(layout); 

     FormData fd = new FormData(); //line 100 
     fd.top = new FormAttachment(0,0);//line 101 
     fd.left = new FormAttachment(0,0);//line 102 
     //fd.right = new FormAttachment(26);//line 103 
     //fd.bottom = new FormAttachment(10);//line 104 
     composite.setLayoutData(fd); 

     RadioGroupFieldEditor rgfe = new RadioGroupFieldEditor("User Choice", 
       "Heading1", 1, new String[][]{ 
      {"A radio button","a"},{"B radio button","b"} 
     }, composite,false); 

     RadioGroupFieldEditor rgfe1 = new RadioGroupFieldEditor("User Choice1", 
       "Heading2", 1, new String[][]{ 
      {"C radio button","c"},{"D radio button","d"} 
     }, composite,false); 



     Text ol = new Text(composite,SWT.READ_ONLY); 
      ol.setText("Output Location"); 
      ol.setEnabled(false); 

//    FormData fd1 = new FormData(); 
//    fd.top = new FormAttachment(fd); 
//    fd.left = new FormAttachment(1); 
//    fd.right = new FormAttachment(26); 
//    fd.bottom = new FormAttachment(10); 
//    ol.pack(); 
//    ol.setLayoutData(fd1); //line 129 --> exception occurs 




     while (!sh.isDisposed()) { 
       if (!parent_display.readAndDispatch()) { 
        parent_display.sleep(); 
       } 
      } 

    } 
+0

'RadioGroupFieldEditor'は、その親が' GridLayout'が設定されていることを前提としています。 'RadioGroupFieldEditor'をGridLayoutが設定された別のコンポジットに埋め込むことをお勧めします。 –

+0

フィールドエディタのクラスは 'FieldEditorPreferencePage'設定ページで使用されることを前提としています。あなたは彼らがどこにいても正しく働くように奮闘します。 –

答えて

0

RadioGroupFieldEditorは、その親がGridLayoutセットを持っていることを前提としています。

RadioGroupFieldEditorを別のCompositeに埋め込み、GridLayoutのセットがあることをお勧めします。次に、FormDataをコンポジットに添付してレイアウトを制御することができます。例えば

Composite composite = new Composite(sh, SWT.NONE); 
GridLayout layout = new GridLayout(); 
layout.marginWidth = 0; 
layout.marginHeight = 0; 
composite.setLayout(layout); 
FormData compositeFormData = new FormData(); 
... 
composite.setLayoutData(compositeFormData); 
RadioGroupFieldEditor fieldEditor = new RadioGroupFieldEditor(..., composite, ...); 
+0

しかし、それらのテキストボックスは、FormLayoutを介してのみ可能であると思われるお互いに関連しています。GridLayoutを使用すると、同じ例外が再び発生します。そうではありませんか? – adi

+0

推奨される解決策をお試しください。 –

+0

RadioGroupFieldEditiorでshの代わりにcompositeを使用しましたが、ol.setLayoutData(fd)で同じ例外が発生しました。 – adi

関連する問題