2012-03-27 8 views
0

Ich habe SWT-Anwendung. Ich muss eine Aufgabe ausführen (mit Fortschrittsbalken), nachdem die Anwendung gestartet wurde und ihr Fenster sichtbar ist. Wie/Wo?Wie wird eine Aufgabe ausgeführt, nachdem das Anwendungsfenster erstellt und sichtbar ist?

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

} 

Antwort

1

Sie könnten einen Paint-Listener verwenden.

@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

Etwas falsch, Methode 'paintControl' wird nicht aufgerufen. Sorry funktioniert, aber mit 'getShell(). AddPaintListener()';) Danke. – marioosh

+0

Allerdings funktioniert es teilweise (Moving-Fenster Aufruf dieser Methode noch einmal), aber danke für die Idee der Registrierung eines Zuhörers, es erklärt eine Menge. – marioosh

0

Dank Tom für eine Idee von Zuhörern registrieren. Ich habe etwas gefunden, das für mich funktioniert - ShellListener. Beispiel unten.

/** 
* 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

Aber ich denke, dass diese Lösung das Problem nicht löst, da ShellActivated jedes Mal ausgeführt wird, wenn das Fenster den Fokus erhält, z. nach dem Ändern des Programmfensters oder durch Rückkehr von einem modalen Dialog. Ich würde stattdessen SWT.Show verwenden. – altralaser