[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] What happened to the scroll bars ?

Hello

First, thanks to Veronika for her response to my post on the thread "Is 
Layout required for Event handling?", appologies for the long delay in 
replying but I have had a prolonged unexpected absense from the project. The 
changes to the code have helped my understanding of SWT.

However I am trying to replicate the effect of the Excel Split pane/Freeze 
pane combination in which the left hand area is narrower than the right. I 
therefore changed the FillLayout to RowLayout, set the rowLayout.wrap to 
false and the two tables were displayed as required but the scroll bars have 
disappeared. I also tried the GridLayout but this had the same effect.

Why should these controls behave differently in these layouts? How do I get 
the scrollbars back in the other layouts?

I have tried changing the table pack to setSize, this makes the vertical 
scroll bars appear but the selection listenser stops and if the combination 
of the two tables is wider than the shell, the right hand scroll bar cannot 
be seen.

Here is the code

package com.wcg.framework.workflow.ui.designer;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
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 MatrixView {

    public MatrixView() {
    }

    public static void main (String [] args) {
        Display display = new Display ();
        Shell shell = new Shell (display);

        // shell.setLayout(new FillLayout());

        RowLayout rowLayout = new RowLayout();
        rowLayout.wrap = false;
        shell.setLayout(rowLayout);

        // GridLayout gridLayout = new GridLayout();
        // gridLayout.numColumns = 2;
        // gridLayout.marginWidth = 1;
        // shell.setLayout(gridLayout);

        final ScrolledComposite sc1 = new ScrolledComposite (shell, 
SWT.H_SCROLL | SWT.V_SCROLL);
        final ScrolledComposite sc2 = new ScrolledComposite (shell, 
SWT.H_SCROLL | SWT.V_SCROLL);
        Table table1 = new Table(sc1,SWT.SINGLE);
        table1.setHeaderVisible(false);
        table1.setLinesVisible(true);
        TableColumn col1 = new TableColumn(table1,SWT.LEFT);
        col1.setWidth(200);
        TableColumn col2 = new TableColumn(table1,SWT.LEFT);
        col2.setWidth(60);
        for (int i = 0; i < 60; i++) {
            TableItem item1 = new TableItem(table1,0);
            item1.setText(new String[]{"Line " + i,"b"});
        }
        Table table2 = new Table(sc2,SWT.SINGLE);
        table2.setHeaderVisible(false);
        table2.setLinesVisible(true);
        for (int i = 0; i < 10; i++) {
            TableColumn col21 = new TableColumn(table2,SWT.LEFT);
            col21.setWidth(80);
        }
        for (int i = 0; i < 60; i++) {
            TableItem item1 = new TableItem(table2,0);
            item1.setText(new String[]{"Line "+i,"c"});
        }
        sc1.setContent(table1);
        table1.pack();
        sc2.setContent(table2);
        table2.pack();
        final ScrollBar vBar1 = sc1.getVerticalBar ();
        final ScrollBar vBar2 = sc2.getVerticalBar ();
        final ScrollBar hBar1 = sc1.getHorizontalBar ();
        final ScrollBar hBar2 = sc2.getHorizontalBar ();
        SelectionListener listener1 = new SelectionAdapter () {
            public void widgetSelected (SelectionEvent e) {
                int x = hBar1.getSelection() * (hBar2.getMaximum() -
                hBar2.getThumb()) / Math.max(1, hBar1.getMaximum() - 
hBar1.getThumb());
                int y = vBar1.getSelection() * (vBar2.getMaximum() -
                vBar2.getThumb()) / Math.max(1, vBar1.getMaximum() - 
vBar1.getThumb());
                sc2.setOrigin (x, y);
            }
        };

        SelectionListener listener2 = new SelectionAdapter () {
            public void widgetSelected (SelectionEvent e) {
                int x = hBar2.getSelection() * (hBar1.getMaximum() -
                hBar1.getThumb()) / Math.max(1, hBar2.getMaximum() - 
hBar2.getThumb());
                int y = vBar2.getSelection() * (vBar1.getMaximum() -
                vBar1.getThumb()) / Math.max(1, vBar2.getMaximum() - 
vBar2.getThumb());
                sc1.setOrigin (x, y);
            }
        };

        vBar1.addSelectionListener (listener1);
        hBar1.addSelectionListener (listener1);
        vBar2.addSelectionListener (listener2);
        hBar2.addSelectionListener (listener2);
        System.out.println("Show");
        shell.setSize (500, 500);
        shell.open ();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) display.sleep ();
        }
        display.dispose ();
    }
}