如何在创建应用程序窗口并可见后运行某些任务?

时间:2012-03-27 12:42:28

标签: swt jface

我有SWT申请。我需要在应用程序启动后运行一些任务(带进度条)并且其窗口可见。怎么做/怎么做?

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TestApp extends ApplicationWindow {

    /**
     * Create the application window.
     */
    public TestApp() {
        super(null);
        createActions();
        addToolBar(SWT.FLAT | SWT.WRAP);
        addMenuBar();
        addStatusLine();
    }

    /**
     * Create contents of the application window.
     * @param parent
     */
    @Override
    protected Control createContents(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);

        return container;
    }

    /**
     * Create the actions.
     */
    private void createActions() {
        // Create the actions
    }

    /**
     * Create the menu manager.
     * @return the menu manager
     */
    @Override
    protected MenuManager createMenuManager() {
        MenuManager menuManager = new MenuManager("menu");
        return menuManager;
    }

    /**
     * Create the toolbar manager.
     * @return the toolbar manager
     */
    @Override
    protected ToolBarManager createToolBarManager(int style) {
        ToolBarManager toolBarManager = new ToolBarManager(style);
        return toolBarManager;
    }

    /**
     * Create the status line manager.
     * @return the status line manager
     */
    @Override
    protected StatusLineManager createStatusLineManager() {
        StatusLineManager statusLineManager = new StatusLineManager();
        return statusLineManager;
    }

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

    /**
     * Configure the shell.
     * @param newShell
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("New Application");
    }

    /**
     * Return the initial size of the window.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(450, 300);
    }

}

2 个答案:

答案 0 :(得分:1)

您可以使用绘画侦听器。

@Override
protected Control createContents(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);

    container.addPaintListener(new PaintListener() {

        @Override
        public void paintControl(PaintEvent e) {
            System.out.println("I'm ready to go...");

        }
    });
    return container;
}

答案 1 :(得分:0)

感谢Tom提出注册监听器的想法。我找到了适合我的东西 - ShellListener。示例如下。

/**
 * Create contents of the application window.
 * @param parent
 */
@Override
protected Control createContents(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);

    // build gui...

    getShell().addShellListener(new ShellAdapter() {
        @Override
        public void shellActivated(ShellEvent shellevent) {
            // some task...
        }
    });     

    return container;
}