2010-04-06 10 views
1

Je tente de créer une fenêtre divisée en trois parties. En-tête et pied de page non redimensionnables, puis une zone de contenu qui s'étend pour remplir la zone restante de la fenêtre. Pour commencer, j'ai créé la classe suivante:JFace ApplicationWindow: createContents ne fonctionne pas

public class MyWindow extends ApplicationWindow { 
    Color white; 
    Font mainFont; 
    Font headerFont; 

    public MyWindow() { 
     super(null); 
     } 

    protected Control createContents(Composite parent) { 
     Display currentDisplay = Display.getCurrent(); 
     white = new Color(currentDisplay, 255, 255, 255); 
     mainFont = new Font(currentDisplay, "Tahoma", 8, 0); 
     headerFont = new Font(currentDisplay, "Tahoma", 16, 0); 

     // Main layout Composites and overall FillLayout 
     Composite container = new Composite(parent, SWT.NO_RADIO_GROUP); 
     Composite header = new Composite(container, SWT.NO_RADIO_GROUP); 
     Composite mainContents = new Composite(container, SWT.NO_RADIO_GROUP);; 
     Composite footer = new Composite(container, SWT.NO_RADIO_GROUP);; 
     FillLayout containerLayout = new FillLayout(SWT.VERTICAL); 
     container.setLayout(containerLayout); 

     // Header 
     Label headerLabel = new Label(header, SWT.LEFT); 
     headerLabel.setText("Header"); 
     headerLabel.setFont(headerFont); 

     // Main contents 
     Label contentsLabel = new Label(mainContents, SWT.CENTER); 
     contentsLabel.setText("Main Content Here"); 
     contentsLabel.setFont(mainFont); 

     // Footer 
     Label footerLabel = new Label(footer, SWT.CENTER); 
     footerLabel.setText("Footer Here"); 
     footerLabel.setFont(mainFont); 

     return container; 
    } 

    public void dispose() { 
     cleanUp(); 
    } 

    @Override 
    protected void finalize() throws Throwable { 
     cleanUp(); 
     super.finalize(); 
    } 

    private void cleanUp() { 
     if (headerFont != null) { 
      headerFont.dispose(); 
     } 
     if (mainFont != null) { 
      mainFont.dispose(); 
     } 
     if (white != null) { 
      white.dispose(); 
     } 
    } 
} 

Et cela se traduit par une fenêtre vide quand je le lance comme ceci:

public static void main(String[] args) { 
    MyWindow myWindow = new MyWindow(); 
    myWindow.setBlockOnOpen(true); 
    myWindow.open(); 
    Display.getCurrent().dispose(); 
} 

Qu'est-ce que je fais mal que je ne vois pas trois étiquette la façon dont j'essaie de les afficher? Le code createContents est définitivement appelé, je peux le parcourir dans Eclipse en mode debug.

Répondre

0

Apparemment, j'avais besoin de définir la taille et l'emplacement des étiquettes pour les faire apparaître.