2016-10-06 6 views
1

Neon EclipseのwindowbuilderでSWT Jface Javaプロジェクトを操作する。 シェル上に2つのコンポジットがあり、イベントハンドラに表示されるように設定されています。 ウィンドウ上でSWTコンポジットが表示されない

package br.engenharia.investimentos; 

import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.custom.StackLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Menu; 
import org.eclipse.swt.widgets.MenuItem; 
import org.eclipse.swt.widgets.Group; 
import org.eclipse.wb.swt.SWTResourceManager; 
import org.eclipse.swt.layout.FormLayout; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.layout.RowLayout; 
import org.eclipse.swt.layout.RowData; 
import org.eclipse.swt.layout.GridData; 

public class Investimentos { 

    protected Shell shellSistemaInvestimentos; 
    private Text txtCompra; 

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

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

    /** 
    * Create contents of the window. 
    */ 
    protected void createContents() { 
     shellSistemaInvestimentos = new Shell(); 
     shellSistemaInvestimentos.setSize(450, 300); 
     shellSistemaInvestimentos.setText("Sistema Investimentos"); 
     shellSistemaInvestimentos.setLayout(new StackLayout()); 

     Composite compositeAcoesCompra = new Composite(shellSistemaInvestimentos, SWT.NONE); 
     compositeAcoesCompra.setFont(SWTResourceManager.getFont("Segoe UI", 16, SWT.BOLD)); 
     compositeAcoesCompra.setLayout(new FormLayout()); 

     txtCompra = new Text(compositeAcoesCompra, SWT.BORDER | SWT.WRAP | SWT.CENTER); 
     FormData fd_txtCompra = new FormData(); 
     fd_txtCompra.top = new FormAttachment(0, 5); 
     fd_txtCompra.left = new FormAttachment(0); 
     fd_txtCompra.right = new FormAttachment(100); 
     txtCompra.setLayoutData(fd_txtCompra); 
     txtCompra.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND)); 
     txtCompra.setFont(SWTResourceManager.getFont("Segoe UI", 16, SWT.BOLD)); 
     txtCompra.setForeground(SWTResourceManager.getColor(SWT.COLOR_DARK_RED)); 
     txtCompra.setText("A\u00E7\u00F5es - Compra"); 

     Composite compositeAcoesOperacao = new Composite(shellSistemaInvestimentos, SWT.NONE); 

     Composite compositeAcoesResultado = new Composite(shellSistemaInvestimentos, SWT.NONE); 

     Composite compositeAcoesEvento = new Composite(shellSistemaInvestimentos, SWT.NONE); 

     Menu menuPrincipalBar = new Menu(shellSistemaInvestimentos, SWT.BAR); 
     shellSistemaInvestimentos.setMenuBar(menuPrincipalBar); 

     MenuItem mntmAcoesSubmenu = new MenuItem(menuPrincipalBar, SWT.CASCADE); 
     mntmAcoesSubmenu.setText("A\u00E7\u00F5es"); 

     Menu menuAcoesCascade = new Menu(mntmAcoesSubmenu); 
     mntmAcoesSubmenu.setMenu(menuAcoesCascade); 

     //Set compositeAcoesCompra visible. After I'll make the same for others. 
     MenuItem mntmCompraItem = new MenuItem(menuAcoesCascade, SWT.NONE); 
     mntmCompraItem.addSelectionListener(new SelectionAdapter() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 
       compositeAcoesCompra.setVisible(true); 
       compositeAcoesOperacao.setVisible(false); 
       compositeAcoesResultado.setVisible(false); 
       compositeAcoesEvento.setVisible(false); 
      } 
     }); 
     mntmCompraItem.setText("Compra"); 

     MenuItem mntmOperacaoItem = new MenuItem(menuAcoesCascade, SWT.NONE); 
     mntmOperacaoItem.setText("Opera\u00E7\u00E3o"); 

     MenuItem mntmResultadoItem = new MenuItem(menuAcoesCascade, SWT.NONE); 
     mntmResultadoItem.setText("Resultado"); 

     MenuItem mntmEventoItem = new MenuItem(menuAcoesCascade, SWT.NONE); 
     mntmEventoItem.setText("Evento"); 

    } 
} 

コンポジット

は、イベントハンドラによって可視化されるが、イベントハンドラが再設定されている以外のウィンドウが最大化されている間、コンポジットは、もう表示されません。

コンポジットをウィンドウで最大化するにはどうすればよいですか?

+0

[mcve] –

+0

完全なコードを投稿する必要があります。ありがとう。 – muhaass

答えて

1

StackLayoutをシェルのレイアウトとして指定しました。これは、一度に1つの子コントロールを正確に表示することを想定しており、表示するコントロールとしてtopControlフィールドを設定する必要があります。 StackLayoutを混乱させます。このように複合材料のいずれかでsetVisibleを呼び出さないでください

StackLayout layout = new StackLayout(); 
shellSistemaInvestimentos.setLayout(layout); 

... 

layout.topControl = compositeAcoesCompra; // whichever control you want to show 

だからあなたのような何かをする必要があります。

+0

layout.topControlを使用して解決します。 – muhaass

関連する問題