在Java SWT窗口中启用滚动条

时间:2012-04-13 17:33:19

标签: java swt

如何在custom.StyledText上启用滚动条? 它显示滚动条但不允许custom.StyledText滚动?

package app;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;



import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.ScrolledComposite;
public class myapp {

protected Shell shlWhois;
private Text text;

/**
 * Launch the application.
 * @param args
 */
public static void main(String[] args) {
    try {
        myapp window = new myapp();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shlWhois.open();
    shlWhois.layout();
    while (!shlWhois.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shlWhois = new Shell();
    shlWhois.setSize(450, 300);
    shlWhois.setText("Whois");

    Label lblDomain = new Label(shlWhois, SWT.NONE);
    lblDomain.setBounds(10, 10, 55, 15);
    lblDomain.setText("Domain");

    text = new Text(shlWhois, SWT.BORDER);

    text.setBounds(72, 4, 260, 21);

    final ScrolledComposite scrolledComposite_1 = new ScrolledComposite(shlWhois, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    scrolledComposite_1.setAlwaysShowScrollBars(true);
    final Composite c = new Composite(scrolledComposite_1, SWT.NONE);
    scrolledComposite_1.setMinHeight(1000);
    scrolledComposite_1.setExpandVertical(true);
    scrolledComposite_1.setExpandHorizontal(true);
    scrolledComposite_1.setBounds(10, 31, 403, 221);

    final StyledText styledText = new StyledText(scrolledComposite_1, SWT.BORDER | SWT.WRAP);

    scrolledComposite_1.setContent(styledText);
    scrolledComposite_1.setMinSize(styledText.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    Button btnWhois = new Button(shlWhois, SWT.NONE);
    btnWhois.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseDown(MouseEvent arg0) {



        }
    });
    btnWhois.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
        }
    });
    btnWhois.setBounds(338, 2, 75, 25);
    btnWhois.setText("Search");



}
}

1 个答案:

答案 0 :(得分:10)

您不需要ScrolledComposite,在SWT.V_SCROLL上使用StyledText样式。以下是一个示例,其中layouts代替setBounds

/**
 * Create contents of the window.
 */
protected void createContents() {
    shlWhois = new Shell();
    shlWhois.setSize(450, 300);
    shlWhois.setText("Whois");
    shlWhois.setLayout(new GridLayout(2, false));

    Label lblDomain = new Label(shlWhois, SWT.NONE);
    lblDomain.setLayoutData(GridDataFactory.fillDefaults().create());
    lblDomain.setText("Domain");

    text = new Text(shlWhois, SWT.BORDER);
    text.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create());

    final StyledText styledText = new StyledText(shlWhois, SWT.BORDER | SWT.V_SCROLL | SWT.MULTI | SWT.WRAP);
    styledText.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(2, 1).create());

    Button btnWhois = new Button(shlWhois, SWT.NONE);
    btnWhois.setText("Search");
}

如果您还需要水平滚动条,则可以使用样式SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI