Hi Daniel,

This is a known issue: http://www.canoo.com/jira/browse/UBA-7092.

The workaround is part of the issue, i.e., do the following after setting
the editor in your code:

     column.setCellEditor(new ITableCellEditor() {
       ...
    });

>>>    table.upload();
>>>    table.setDefaultEditor(StringBuffer.class, null);

Thanks and regards,

Janak


>-----Original Message-----
>From: [EMAIL PROTECTED]
>[mailto:[EMAIL PROTECTED] Behalf Of
>[EMAIL PROTECTED]
>Sent: Monday, December 11, 2006 2:18 PM
>To: [email protected]
>Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
>Subject: [ULC-developer] Table edit problem with cell editor since 6.1
>
>
>
>Hello!
>
>Since ULC version 6.1 we have a special problem with clicks on a table, in
>particular editing the model. Please see the attached snipped to reproduce
>this behaviour. We implemented a checkbox celleditor and cellrenderer to
>show what we mean. If you fire up the table frame the first time, you have
>to click two times to change the value of the checkbox in column four.
>After you close the frame (not the application) and fire up the table
>again, you only have to click once. The code worked fine on ULC version
>6.04, where you only have to click once - even if it starts up the first
>time. If you run the attached snipped on the above mentioned versions you
>will see the difference. It seems the table has to focus first. Furthermore
>it isn“t possible to active the checkbox by keyboard.
>
>We already tried playing with "ClientContext" delivery mode options with no
>result. Btw. we had problems finding any documentation on the different
>event category constants from UlcEventCategories. It would be helpful, if
>you can update javadocs with the constants and there special meaning.
>
>We will be glad, if you have any hint or idea to solve this problem.
>
>
>Best regards,
>Daniel
>
>
>+++ Snipped +++
>
>import com.ulcjava.base.application.AbstractApplication;
>import com.ulcjava.base.application.ClientContext;
>import com.ulcjava.base.application.IEditorComponent;
>import com.ulcjava.base.application.IRendererComponent;
>import com.ulcjava.base.application.ULCBoxPane;
>import com.ulcjava.base.application.ULCButton;
>import com.ulcjava.base.application.ULCCheckBox;
>import com.ulcjava.base.application.ULCFrame;
>import com.ulcjava.base.application.ULCScrollPane;
>import com.ulcjava.base.application.ULCTable;
>import com.ulcjava.base.application.event.ActionEvent;
>import com.ulcjava.base.application.event.IActionListener;
>import com.ulcjava.base.application.table.DefaultTableModel;
>import com.ulcjava.base.application.table.ITableCellEditor;
>import com.ulcjava.base.application.table.ITableCellRenderer;
>import com.ulcjava.base.application.table.ULCTableColumn;
>import com.ulcjava.base.application.table.ULCTableColumnModel;
>import com.ulcjava.base.development.DevelopmentRunner;
>
>/**
> * Snipped. Simulates a table cell/click problem.
> */
>public class TableClickSnipped extends AbstractApplication {
>  /**
>   * Starts the snipped.
>   */
>  public void start() {
>    final ULCTable table = new ULCTable(new SnippetTableModel());
>    ULCTableColumnModel columnModel = table.getColumnModel();
>
>    // only the last column has a checkbox cell renderer and cell editor
>    ULCTableColumn column = columnModel.getColumn(3);
>
>    // the checkbox cell renderer
>    column.setCellRenderer(new ITableCellRenderer() {
>      public IRendererComponent getTableCellRendererComponent(ULCTable
>        table, Object value, boolean isSelected, boolean hasFocus, int row)
>        {
>        final ULCCheckBox cbState = new ULCCheckBox();
>        cbState.setHorizontalAlignment(ULCCheckBox.CENTER);
>
>        if (value instanceof Boolean) {
>          cbState.setSelected(((Boolean) value).booleanValue());
>        } else if (value instanceof String) {
>          cbState.setSelected((((String) value).equalsIgnoreCase("true")) ?
>          true : false);
>        }
>
>        if (isSelected) {
>
>cbState.setBackground(ClientContext.getColor("Table.selectionBackground"));
>        } else {
>
>cbState.setBackground(ClientContext.getColor("Table.background"));
>        }
>
>        return cbState;
>      }
>    });
>
>    // the checkbox cell editor
>    column.setCellEditor(new ITableCellEditor() {
>      public IEditorComponent getTableCellEditorComponent(ULCTable table,
>        Object value, int row) {
>        final ULCCheckBox cbState = new ULCCheckBox();
>        cbState.setHorizontalAlignment(ULCCheckBox.CENTER);
>
>        if (cbState.isSelected()) {
>
>cbState.setBackground(ClientContext.getColor("Table.selectionBackground"));
>        } else {
>
>cbState.setBackground(ClientContext.getColor("Table.background"));
>        }
>
>        return cbState;
>      }
>    });
>
>    ULCButton clickBtn = new ULCButton("Click me!");
>    clickBtn.addActionListener(new IActionListener() {
>      public void actionPerformed(ActionEvent event) {
>        // This is the callable table frame
>        ULCFrame popup = new ULCFrame("Popup Window");
>        popup.setDefaultCloseOperation(ULCFrame.DISPOSE_ON_CLOSE);
>
>        ULCBoxPane tableContent = new ULCBoxPane(1, 0);
>        tableContent.add(ULCBoxPane.BOX_EXPAND_EXPAND, new
>        ULCScrollPane(table));
>        popup.add(tableContent);
>
>        popup.setLocationRelativeTo(null);
>        popup.setVisible(true);
>        popup.toFront();
>      }
>    });
>
>    ULCBoxPane content = new ULCBoxPane(1, 0);
>    content.add(ULCBoxPane.BOX_CENTER_CENTER, clickBtn);
>
>    // This is the calling frame
>    ULCFrame frame = new ULCFrame("TableClickSnipped");
>    frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE);
>    frame.add(content);
>
>    frame.setLocationRelativeTo(null);
>    frame.setVisible(true);
>    frame.toFront();
>  }
>
>  /**
>   * Start method.
>   *
>   * @param args - optional
>   */
>  public static void main(String[] args) {
>    DevelopmentRunner.setApplicationClass(TableClickSnipped.class);
>    DevelopmentRunner.main(args);
>  }
>
>  // -- TableModel
>  ------------------------------------------------------------
>
>  /**
>   * The TableModel.
>   */
>  private static class SnippetTableModel extends DefaultTableModel {
>    /** Option-Flag. */
>    private boolean checkFlag = false;
>
>    public Object getValueAt(int row, int column) {
>      if (column == 3) {
>        return Boolean.valueOf(checkFlag);
>      } else {
>        return "Text";
>      }
>    }
>
>    public void setValueAt(Object value, int row, int column) {
>      if (column == 3) {
>        this.checkFlag = ((Boolean) value).booleanValue();
>      } else {
>        super.setValueAt(value, row, column);
>      }
>    }
>
>    public int getRowCount() {
>      return 1;
>    }
>
>    public int getColumnCount() {
>      return 4;
>    }
>
>    public String getColumnName(int column) {
>      return "C" + column;
>    }
>  }
>}
>
>_______________________________________________
>ULC-developer mailing list
>[email protected]
>http://lists.canoo.com/mailman/listinfo/ulc-developer

_______________________________________________
ULC-developer mailing list
[email protected]
http://lists.canoo.com/mailman/listinfo/ulc-developer

Reply via email to