Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[platform-swt-dev] Re: Why does SelectionListener fail to fire?

Hello

I am reposting this in the hope that someone missed it before who can
help, 
this is the final piece of the jigsaw and all attempts so far have
failed. 
In a separate test, the listener is fired but I can't see why this
example 
does not

Thanks

Mike

> I am implementing a 4 table display and am using the example in the 
> snippets to synchronise two tables, however when I add a
SelectionListener 
> to the ScrolledComposite, it fails to fire when I move the scroll bar.
>
> The code is shown below, it defines 4 tables topLeft, topRight,
bottomLeft 
> and bottomRight within a FormLayout.
>
> (As a secondary question, why does bottomLeft fail to extend to the
bottom 
> of the Shell despite expandVertical being set to true ?)
>
> Your help would be most appreciated
>
> Thanks
> Mike
>
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.custom.ScrolledComposite;
> import org.eclipse.swt.events.ControlAdapter;
> import org.eclipse.swt.events.ControlEvent;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.graphics.Rectangle;
> import org.eclipse.swt.layout.FormAttachment;
> import org.eclipse.swt.layout.FormData;
> import org.eclipse.swt.layout.FormLayout;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.ScrollBar;
> import org.eclipse.swt.widgets.Shell;
> import org.eclipse.swt.widgets.Table;
> import org.eclipse.swt.widgets.TableColumn;
> import org.eclipse.swt.widgets.TableItem;
>
> public class TableScrollTest {
>  TableViewer columnViewer;
>  /**
>   * @param args
>   */
>  public static void main(String[] args) {
>    TableScrollTest tableScrollTest = new TableScrollTest();
>    tableScrollTest.run();
>  }
>
>  public void run() {
>
>    Display display = new Display ();
>
>    Shell shell = new Shell (display);
>    shell.setSize (900, 400);
>
>    FormLayout formLayout = new FormLayout();
>    shell.setLayout(formLayout);
>
>    //  Top left
>
>    final Table topLeft = new Table(shell,SWT.SINGLE |
SWT.FULL_SELECTION);
>    topLeft.setHeaderVisible(true);
>    topLeft.setLinesVisible(true);
>    FormData topLeftFormData = new FormData();
>    topLeftFormData.width = 244;
>    topLeft.setLayoutData(topLeftFormData);
>    TableColumn tlColumn1  = new TableColumn(topLeft,SWT.LEFT);
>    tlColumn1.setWidth(200);
>    TableColumn tlColumn2  = new TableColumn(topLeft,SWT.LEFT);
>    tlColumn2.setWidth(60);
>    for (int i=0; i<2; i++) {
>      new TableItem (topLeft, SWT.NONE);
>    }
>    topLeft.pack();
>    //  Top right
>
>    final ScrolledComposite trScroller = new ScrolledComposite (shell, 
> SWT.H_SCROLL );
>    FormLayout trFormLayout = new FormLayout();
>    trScroller.setLayout(trFormLayout);
>    trScroller.setExpandHorizontal(true);
>    final FormData trScrollerFormData = new FormData();
>    trScrollerFormData.left = new FormAttachment(topLeft, 5);
>    trScrollerFormData.top = new FormAttachment(0);
>    trScrollerFormData.width = shell.getClientArea().width - 
> topLeft.getSize().x - 5;
>    trScroller.setLayoutData(trScrollerFormData);
>    final Table topRight = new Table(trScroller,SWT.SINGLE| 
> SWT.FULL_SELECTION | SWT.HIDE_SELECTION  );
>    topRight.setHeaderVisible(true);
>    topRight.setLinesVisible(false);
>    for (int i = 0; i < 10; i++) {
>      TableColumn tableColumn  = new TableColumn(topRight,SWT.CENTER);
>      tableColumn.setWidth(80);
>    }
>
>    for (int i=0; i<2; i++) {
>      new TableItem (topRight, SWT.NONE);
>    }
>
>    topRight.pack();
>    final FormData trFormData = new FormData();
>    trFormData.left = new FormAttachment(0, 0);
>    trFormData.top = new FormAttachment(0);
>    trFormData.width = shell.getClientArea().width -
topLeft.getSize().x - 
> 5;
>    topRight.setLayoutData(trFormData);
>
>    trScroller.setContent(topRight);
>
>
>    //  Bottom Left
>
>    final ScrolledComposite blScroller = new ScrolledComposite (shell, 
> SWT.V_SCROLL);
>    blScroller.setExpandVertical(true);
>    final FormData blScrollerFormData = new FormData();
>    blScrollerFormData.left = new FormAttachment(0, 5);
>    blScrollerFormData.top = new FormAttachment(topLeft, 5);
>    blScrollerFormData.width = 244;
>    blScroller.setLayoutData(blScrollerFormData);
>    final Table bottomLeft = new Table(blScroller,SWT.SINGLE | 
> SWT.FULL_SELECTION);
>    bottomLeft.setHeaderVisible(true);
>    bottomLeft.setLinesVisible(true);
>    TableColumn blColumn1  = new TableColumn(bottomLeft,SWT.LEFT);
>    blColumn1.setWidth(200);
>    TableColumn blColumn2  = new TableColumn(bottomLeft,SWT.LEFT);
>    blColumn2.setWidth(60);
>    for (int i=0; i<12; i++) {
>      TableItem item = new TableItem (bottomLeft, SWT.NONE);
>      item.setText(new String[] {"Row " , String.valueOf(i)});
>    }
>    bottomLeft.pack();
>    FormData blFormData = new FormData();
>    blFormData.width = 244;
>    blFormData.left = new FormAttachment(0, 0);
>    blFormData.top = new FormAttachment(0);
>    bottomLeft.setLayoutData(blFormData);
>    blScroller.setContent(bottomLeft);
>
>    //  Bottom right
>
>    final ScrolledComposite brScroller = new ScrolledComposite (shell, 
> SWT.NONE);
>    brScroller.setExpandHorizontal(true);
>    brScroller.setExpandVertical(true);
>    final Table bottomRight = new Table(brScroller,SWT.SINGLE| 
> SWT.FULL_SELECTION | SWT.HIDE_SELECTION );
>    bottomRight.setHeaderVisible(false);
>    bottomRight.setLinesVisible(true);
>    for (int i = 0; i < 10; i++) {
>      TableColumn tableColumn  = new
TableColumn(bottomRight,SWT.CENTER);
>      tableColumn.setWidth(80);
>    }
>
>    for (int i=0; i<12; i++) {
>      TableItem item = new TableItem (bottomRight, SWT.NONE);
>      String [] line = new String[10];
>      for (int j = 0; j < line.length; j++) {
>        line[j] = String.valueOf(i*10+j);
>      }
>      item.setText(line);
>    }
>
>    bottomRight.pack();
>    final FormData brFormData = new FormData();
>    brFormData.left = new FormAttachment(blScroller, 5);
>    brFormData.top = new FormAttachment(trScroller,  0);
>    brFormData.width = shell.getClientArea().width -
topLeft.getSize().x - 
> 5;
>    brScroller.setLayoutData(brFormData);
>    brScroller.setContent(bottomRight);
>
>
>    shell.addControlListener(new ControlAdapter() {
>      public void controlResized(ControlEvent event) {
>        Shell shell = (Shell)event.getSource();
>        Rectangle rect = shell.getClientArea();
>        trFormData.width = rect.width - topLeft.getSize().x - 5;
>        trScrollerFormData.width = rect.width - topLeft.getSize().x -
5;
>        brFormData.width = rect.width - topLeft.getSize().x - 5;
>        brFormData.height = rect.height - topRight.getSize().y - 5;
>        shell.layout();
>      }
>    });
>
>
>    final ScrollBar trScrollBar = trScroller.getHorizontalBar();
>    trScrollBar.addSelectionListener( new SelectionAdapter () {
>      public void widgetSelected (SelectionEvent e) {
>
>        //  >>>>  This does not fire  <<<<
>        System.out.println("trScrollBar " + trScrollBar.getSelection ()
+ " 
> " + trScrollBar.getSelection ());
>        brScroller.setOrigin(trScrollBar.getSelection(), 0);
>      }
>    });
>
>    final ScrollBar brScrollBar = trScroller.getHorizontalBar();
>    brScrollBar.addSelectionListener( new SelectionAdapter () {
>      public void widgetSelected (SelectionEvent e) {
>
>        //  >>>>  This does not fire  <<<<
>        System.out.println("brScrollBar " + brScrollBar.getSelection ()
+ " 
> " + brScrollBar.getSelection ());
>        brScroller.setOrigin(trScrollBar.getSelection(), 0);
>      }
>    });
>
>    shell.open ();
>
>    Rectangle rect = shell.getClientArea();
>    trFormData.width = rect.width - topLeft.getSize().x - 5;
>    trScrollerFormData.width = rect.width - topLeft.getSize().x - 5;
>    brFormData.width = rect.width - topLeft.getSize().x - 5;
>    brFormData.height = rect.height - topRight.getSize().y - 5;
>    shell.layout();
>
>    while (!shell.isDisposed ()) {
>      if (!display.readAndDispatch ()) display.sleep ();
>    }
>    display.dispose ();
>  }
> }
> 




Back to the top