2009-03-11 13 views
1

TableEditorを使用して、テーブルに異なるコントロールを配置しています。任意のコントロールを使用してswtテーブルのテキストコンテンツを取得する方法

... 
TableItem [] items = table.getItems(); 
for (int i=0; i<items.length; i++) { 
    TableEditor editor = new TableEditor (table); 
    final Text text1 = new Text (table, SWT.NONE); 
    text1.setText(listSimOnlyComponents.get(i).getName()); 
    text1.setEditable(false); 
    editor.grabHorizontal = true; 
    editor.setEditor(text1, items[i], 0); 

    editor = new TableEditor (table); 
    final CCombo combo1 = new CCombo (table, SWT.NONE); 
    combo1.setText(""); 
    Set<String> comps = mapComponentToPort.keySet(); 
    for(String comp:comps) 
     combo1.add(comp); 
    editor.grabHorizontal = true; 
    editor.setEditor(combo1, items[i], 1); 
} //end of for 
... 

私はgetItem(i).getTextを使用してテーブルの上にテキストを取得しようとするのgetTextが、私はテーブルの上にテキストを表示されている場合でも、空の文字列を返すんなぜ、私は空の文字列

... 
TableItem [] items = table.getItems(); 
for(int i=0; i<items.length; i++) { 
    TableItem item = items[i]; 
    String col0text = items[i].getText(0); //this text is empty 
    String col1text = items[i].getText(1); //this text is empty 
} 
... 

を取得しますか?

答えて

0

テーブルをどのように設定していますか?私はコードをコピーしてデバッグし、以下のようにテーブルを設定します(ループの最初)
私は試しましたが、あなたが見ている問題を再現できませんでした。あなたがテーブルに物を追加する方法かもしれません。コントロールのイベントリスナーで
TableEditor Examples

Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 
     final Table table = new Table(shell, SWT.BORDER | SWT.MULTI); 
     for (int i = 0; i < 3; i++) { 
      TableItem item = new TableItem(table, SWT.NONE); 
      item.setText(new String[] { "" + i, "" + i, "" + i }); 
     } 
     TableItem [] items = table.getItems(); 
     for (int i=0; i<items.length; i++) { 
      TableEditor editor = new TableEditor (table); 
      final Text text1 = new Text (table, SWT.NONE); 
      text1.setText("TEST"); 
      text1.setEditable(false); 
      editor.grabHorizontal = true; 
      editor.setEditor(text1, items[i], 0); 

      editor = new TableEditor (table); 
      final CCombo combo1 = new CCombo (table, SWT.NONE); 
      combo1.setText(""); 
      String[] comps = {"A","B","C"}; 
      for(String comp:comps) 
       combo1.add(comp); 
      editor.grabHorizontal = true; 
      editor.setEditor(combo1, items[i], 1); 
     } //end of for 


     TableItem [] items2 = table.getItems(); 
     for(int i=0; i<items2.length; i++) { 
      TableItem item = items2[i]; 
      String col0text = items2[i].getText(0); //returns '0' first for loop 
     } 
+0

この例では、getText(0)は "TEST"を返し、getText(1)はコンボボックスの選択( "A"、 "B"または "C")を返します。しかし、それはこのように動作しないようです。これを達成する方法はありますか? –

1

私はこれが私に望ましい結果を与える

item.setText call 
    ... 
    combo1.addSelectionListener(new SelectionAdapter() { 
    public void widgetSelected(SelectionEvent evt) { 
       String sel = combo2.getText(); 
     item.setText(ComponentPortToConnectCol, sel); 
}}); 
    ... 

を追加しました。手がかりのためにOTislerに感謝します

2

textプロパティを使用する代わりに、dataプロパティを使用することを検討してください。

利点:

  1. あなたは直接テーブル項目に(例えば制御や複雑なデータ構造)のデータを添付することができます。
  2. テーブル項目エディタからテーブル項目エディタで知る必要があるのは、dataプロパティに格納されるオブジェクト参照だけです。
  3. イベント処理の必要はありません(本当に必要なときにコントロールデータを読み込むだけです)。

作成:

TableItem item = new TableItem(table, SWT.None); 
TableEditor editor = new TableEditor(table); 
Button checkbox = new Button(table, SWT.CHECK); 
checkbox.pack(); 
editor.setEditor(checkbox,item,0); 
item.setData("cb",checkbox); // using key enables you to add more pieces of complex data 

読む:

for (TableItem item : table) { 
    Button checkbox = (Button) item.getData("cb"); 
    if (checkbox.getSelection()) { /* ... do whatever you want */ } 
} 

表が現れ、チェックボックスが表示され、クリックすることができます。透明なバックグラウンドコントロールの場合、setTextメソッドを使用すると失敗します - >テーブル項目のセルのテキストが のコントロールの下に表示されます(これを試しました)。

とにかく、データ項目キーを隠すようにテーブル項目クラスを拡張することができれば、はるかに簡単です。しかし、通常どおり、サブクラス化は拒否されます。

関連する問題