1

メインのダイアログには、JFace TableViewer があります。テーブルの最後の列は ComboBoxCellEditor です。いいえ、はい、両方のオプションがあります。これはすべて設計どおりに機能します。

しかし、ここに私の問題があります。

  1. ユーザーが値として両方を選択した場合。
  2. 配列から現​​在の行データを取得するメソッドを実行する必要があります
  3. 値を両方からいいえに変更します
  4. データのコピーを作成し、値を「はい」に変更します
  5. 両方を配列に追加し直します
  6. テーブルを更新する

テーブルの例

から -

1002 | 001   | sss   |  part | both(user changed from default)

に -

1002 |  001  |  sss  |  part |  No

1002 |  001  |  sss  |  part | Yes

両方を選択した後、メソッドを実行して残りを実行する方法を理解しようとしています。私はそれがある種のリスナーでなければならないと仮定しています。私の EditingSupport コードを見て、メソッドを開始して残りを実行する場所を示してください。

public class OptionEditingSupport extends EditingSupport 
{
    private ComboBoxCellEditor cellEditor;

    public OptionEditingSupport(ColumnViewer viewer) {
        super(viewer);
        cellEditor = new ComboBoxCellEditor(((TableViewer)viewer).getTable(), new String[]{"No", "Yes", "Both"}, SWT.DROP_DOWN);
        //cellEditor.setValue(0);
    }
    protected CellEditor getCellEditor(Object element) {
        return cellEditor;
    }
    protected boolean canEdit(Object element) {
        return true;
    }
    protected Object getValue(Object element) {
        return 0;
    }
    protected void setValue(Object element, Object value) 
    {
        if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
            Integer choice = (Integer)value;
            //String option = (choice == 0? "Yes":"No":"Both");
            String option = ((AplotDatasetData)element).getMarkupValue();;
            if(choice == 0) {
                option = "No";
            }    
            else if(choice == 1) {
                option = "Yes";
            }    
            else {
                option = "Both";
            }    
            ((AplotDatasetData)element).setMarkupValue(option);
            getViewer().update(element, null);
        }
    }
}  
4

1 に答える 1

1

私があなたの質問を理解している限り、オブジェクトの 1 つを複製し、それをモデルに追加して、ビューアを更新したいと考えています。

"both"そして、これはすべて、ユーザーがコンボボックスで選択したときに発生するはずです。これがいつ起こるか、あなたはすでに知っています。elseあなたはあなたの方法の場合に終わるでしょうsetValue。次に、そこでしなければならないことを行うことができます:

protected void setValue(Object element, Object value) 
{
    if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
        Integer choice = (Integer)value;

        String option = ((AplotDatasetData)element).getMarkupValue();

        if(choice == 0) {
            option = "No";
        }    
        else if(choice == 1) {
            option = "Yes";
        }    
        else {
            option = "Both";

            // create a copy of your element
            // add it to your model
            // update the viewer
        }

        getViewer().update(element, null);
    }

}
于 2012-10-12T09:31:24.180 に答える