2012-03-27 3 views
0

私は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); 
    } 

} 

答えて

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; 
} 
+0

何か間違っている、メソッド 'paintControl'は呼び出されません。申し訳ありませんが、 'getShell()。addPaintListener()';)ありがとうございます。 – marioosh

+0

しかし、それは部分的に動いています(その方法を再び呼び出す方法です)。しかし、聞き手を登録していただきありがとうございます。 – marioosh

0

リスナーを登録していただきありがとうございます。私のために働くものが見つかりました - 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; 
} 
+0

しかし、この解決策では、ウィンドウがフォーカスを取得するたびにshellActivatedが実行されるため、この問題は解決しないと思います。プログラムウィンドウを変更した後、またはモーダルダイアログから戻った後代わりにSWT.Showを使用します。 – altralaser

関連する問題