当来自 Eclipse 的 运行 时,SWT CTabFolder 不显示

SWT CTabFolder doesn't display when running from eclipse

我正在使用 Eclipse 4.4.2 中的 WindowBuilder 创建一个应用程序。我添加了 CTabFolders 和相应的 CTabItems。在 windowbuilder.

中单击预览按钮(无需编译或 运行 快速 test/preview 或 运行 即可正确显示选项卡。

屏幕截图===> http://i.imgur.com/Sx9TQrL.jpg

但真正的问题是当我 运行 应用程序时,选项卡不显示。

屏幕截图===> http://i.imgur.com/OP7WY8W.jpg

代码

public class Dashboard {
  public static void main(String[] args) {
    Display display = Display.getDefault();
    final Shell shell = new Shell();

    shell.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/com/sun/java/swing/plaf/windows/icons/Computer.gif"));
    shell.setBackground(SWTResourceManager
            .getColor(SWT.COLOR_WIDGET_BORDER));
    shell.setSize(1080, 700);
    shell.setLayout(new GridLayout(2, false));

    /**
     * Base Layout
     * **/
    Composite content = new Composite(shell, SWT.BORDER);
    content.setBackground(SWTResourceManager
            .getColor(SWT.COLOR_WIDGET_BACKGROUND));
    content.setLayout(new StackLayout());
    // content.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false,
    // false));
    content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    final CTabFolder tabFolder = new CTabFolder(content, SWT.CLOSE);
    tabFolder.setTabHeight(28);
    tabFolder.setSimple(false);
    tabFolder.setSelectionForeground(SWTResourceManager
            .getColor(SWT.COLOR_BLACK));
    tabFolder.setBackground(SWTResourceManager
            .getColor(SWT.COLOR_WIDGET_BACKGROUND));
    tabFolder.setSelectionBackground(Display.getCurrent().getSystemColor(
            SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT));

    CTabItem homeTab = new CTabItem(tabFolder, SWT.NONE);
    homeTab.setText("Home");

    Composite composite_4 = new Composite(tabFolder, SWT.NONE);
    homeTab.setControl(composite_4);

    Label lblHome = new Label(composite_4, SWT.NONE);
    lblHome.setBounds(185, 105, 55, 15);
    lblHome.setText("Home");

    final CTabItem empTab = new CTabItem(tabFolder, SWT.CLOSE);
    empTab.setImage(SWTResourceManager.getImage(
            Dashboard.class, "/resource/icons/employee.png"));
    empTab.setText("Employees");

    Composite composite_5 = new Composite(tabFolder, SWT.NONE);
    empTab.setControl(composite_5);

    Label lblEmployees = new Label(composite_5, SWT.NONE);
    lblEmployees.setBounds(155, 102, 55, 15);
    lblEmployees.setText("Employees");

    CTabItem workTab = new CTabItem(tabFolder, SWT.CLOSE);
    workTab.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/worksite.png"));
    workTab.setText("Work Site");

    Composite composite_6 = new Composite(tabFolder, SWT.NONE);
    workTab.setControl(composite_6);

    Label lblWorkSite = new Label(composite_6, SWT.NONE);
    lblWorkSite.setBounds(222, 123, 55, 15);
    lblWorkSite.setText("Work site");

    CTabItem paymentTab = new CTabItem(tabFolder, SWT.NONE);
    paymentTab.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/payments.png"));
    paymentTab.setText("Payments");

    Composite composite_7 = new Composite(tabFolder, SWT.NONE);
    paymentTab.setControl(composite_7);

    Label lblPayments = new Label(composite_7, SWT.NONE);
    lblPayments.setBounds(185, 176, 55, 15);
    lblPayments.setText("Payments");

    CTabItem toolsTab = new CTabItem(tabFolder, SWT.NONE);
    toolsTab.setImage(SWTResourceManager.getImage(Dashboard.class,       "/resource/icons/tools.png"));
    toolsTab.setShowClose(true);
    toolsTab.setText("Tools");

    Composite composite_8 = new Composite(tabFolder, SWT.NONE);
    toolsTab.setControl(composite_8);

    Label lblTools = new Label(composite_8, SWT.NONE);
    lblTools.setBounds(264, 125, 55, 15);
    lblTools.setText("Tools");
    /**
     * MenuBar
     * **/
    Menu menu = new Menu(shell, SWT.BAR);
    shell.setMenuBar(menu);

    MenuItem mntmFile = new MenuItem(menu, SWT.CASCADE);
    mntmFile.setImage(null);
    mntmFile.setText("File");

    Menu menu_1 = new Menu(mntmFile);
    mntmFile.setMenu(menu_1);

    MenuItem mntmExit = new MenuItem(menu_1, SWT.NONE);
    mntmExit.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {

            shell.dispose();
        }
    });
    mntmExit.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/close.png"));
    mntmExit.setText("Exit");

    MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE);
    mntmHelp.setText("Help");

    Menu menu_2 = new Menu(mntmHelp);
    mntmHelp.setMenu(menu_2);

    MenuItem mntmAbout = new MenuItem(menu_2, SWT.NONE);
    mntmAbout.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            About abdialog = new About(shell, 0);
            abdialog.open();
        }
    });
    mntmAbout.setText("About");

    Composite sidebar = new Composite(shell, SWT.NONE);
    sidebar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1,
            1));
    sidebar.setBackground(SWTResourceManager.getColor(112, 128, 144));
    sidebar.setLayout(new GridLayout(1, false));

    ExpandBar expandBar = new ExpandBar(sidebar, SWT.NONE);
    expandBar.setBackground(SWTResourceManager.getColor(112, 128, 144));
    expandBar.setTouchEnabled(true);
    GridData gd_expandBar = new GridData(SWT.CENTER, SWT.CENTER, false,
            false, 1, 1);
    gd_expandBar.heightHint = 619;
    expandBar.setLayoutData(gd_expandBar);

    ExpandItem xpndtmEmployeeDetails = new ExpandItem(expandBar, SWT.NONE,
            0);
    xpndtmEmployeeDetails.setExpanded(true);
    xpndtmEmployeeDetails.setImage(SWTResourceManager.getImage(
            Dashboard.class, "/resource/icons/employee.png"));
    xpndtmEmployeeDetails.setText("Employee Details");

    Composite expandbarComposite = new Composite(expandBar, SWT.NONE);
    xpndtmEmployeeDetails.setControl(expandbarComposite);
    xpndtmEmployeeDetails.setHeight(100);
    expandbarComposite.setLayout(new FormLayout());
    expandbarComposite.setBackground(SWTResourceManager
            .getColor(SWT.COLOR_WIDGET_BACKGROUND));

    Button btnAddNew = new Button(expandbarComposite, SWT.NONE);
    btnAddNew.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/ic_add.png"));
    FormData fd_btnAddNew = new FormData();
    fd_btnAddNew.right = new FormAttachment(100, -10);
    fd_btnAddNew.left = new FormAttachment(0, 38);
    btnAddNew.setLayoutData(fd_btnAddNew);
    btnAddNew.setText("Add New");

    Button btnEdit = new Button(expandbarComposite, SWT.FLAT | SWT.CENTER);
    btnEdit.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
        }
    });
    btnEdit.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/edit.png"));
    fd_btnAddNew.bottom = new FormAttachment(btnEdit, -6);
    FormData fd_btnEdit = new FormData();
    fd_btnEdit.left = new FormAttachment(btnAddNew, 0, SWT.LEFT);
    fd_btnEdit.right = new FormAttachment(btnAddNew, 0, SWT.RIGHT);
    fd_btnEdit.bottom = new FormAttachment(100);
    btnEdit.setLayoutData(fd_btnEdit);
    btnEdit.setText("Edit");
    /**
    * View Employees Button
    * **/
    Button btnViewEmployees = new Button(expandbarComposite, SWT.NONE);
    btnViewEmployees.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            tabFolder.setSelection(empTab);

        }
    });
    FormData fd_btnViewEmployees = new FormData();
    fd_btnViewEmployees.right = new FormAttachment(btnAddNew, 0, SWT.RIGHT);
    fd_btnViewEmployees.top = new FormAttachment(0, 6);
    fd_btnViewEmployees.left = new FormAttachment(btnAddNew, 0, SWT.LEFT);
    btnViewEmployees.setLayoutData(fd_btnViewEmployees);
    btnViewEmployees.setText("View Employees");

    ExpandItem xpndtmWorkSiteDetails = new ExpandItem(expandBar, SWT.NONE);
    xpndtmWorkSiteDetails.setImage(SWTResourceManager.getImage(
            Dashboard.class, "/resource/icons/worksite.png"));
    xpndtmWorkSiteDetails.setText("Work Site Details");

    Composite composite = new Composite(expandBar, SWT.NONE);
    xpndtmWorkSiteDetails.setControl(composite);
    xpndtmWorkSiteDetails.setHeight(100);
    composite.setLayout(new FormLayout());

    Button btnAddNew_1 = new Button(composite, SWT.NONE);
    btnAddNew_1.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/ic_add.png"));
    FormData fd_btnAddNew_1 = new FormData();
    fd_btnAddNew_1.right = new FormAttachment(100, -10);
    fd_btnAddNew_1.top = new FormAttachment(0, 37);
    btnAddNew_1.setLayoutData(fd_btnAddNew_1);
    btnAddNew_1.setText("Add New");

    Button btnEdit_1 = new Button(composite, SWT.NONE);
    fd_btnAddNew_1.bottom = new FormAttachment(btnEdit_1, -6);
    fd_btnAddNew_1.left = new FormAttachment(btnEdit_1, 0, SWT.LEFT);
    btnEdit_1.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/edit.png"));
    FormData fd_btnEdit_1 = new FormData();
    fd_btnEdit_1.left = new FormAttachment(0, 40);
    fd_btnEdit_1.right = new FormAttachment(100, -10);
    fd_btnEdit_1.bottom = new FormAttachment(100);
    btnEdit_1.setLayoutData(fd_btnEdit_1);
    btnEdit_1.setText("Edit");

    Button btnViewWorks = new Button(composite, SWT.NONE);
    FormData fd_btnViewWorks = new FormData();
    fd_btnViewWorks.top = new FormAttachment(0, 6);
    fd_btnViewWorks.left = new FormAttachment(btnAddNew_1, 0, SWT.LEFT);
    fd_btnViewWorks.right = new FormAttachment(100, -10);
    btnViewWorks.setLayoutData(fd_btnViewWorks);
    btnViewWorks.setText("View Works");

    ExpandItem xpndtmPaymentDetails = new ExpandItem(expandBar, SWT.NONE);
    xpndtmPaymentDetails.setImage(SWTResourceManager.getImage(
            Dashboard.class, "/resource/icons/payments.png"));
    xpndtmPaymentDetails.setText("Payment Details");

    Composite composite_1 = new Composite(expandBar, SWT.NONE);
    xpndtmPaymentDetails.setControl(composite_1);
    xpndtmPaymentDetails.setHeight(100);
    composite_1.setLayout(new FormLayout());

    Button btnAddNew_2 = new Button(composite_1, SWT.NONE);
    btnAddNew_2.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/ic_add.png"));
    FormData fd_btnAddNew_2 = new FormData();
    fd_btnAddNew_2.left = new FormAttachment(0, 44);
    btnAddNew_2.setLayoutData(fd_btnAddNew_2);
    btnAddNew_2.setText("Add New");

    Button btnEditPayments = new Button(composite_1, SWT.NONE);
    fd_btnAddNew_2.bottom = new FormAttachment(btnEditPayments, -6);
    fd_btnAddNew_2.right = new FormAttachment(btnEditPayments, 0, SWT.RIGHT);
    btnEditPayments.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/edit.png"));
    FormData fd_btnEditPayments = new FormData();
    fd_btnEditPayments.left = new FormAttachment(0, 44);
    fd_btnEditPayments.right = new FormAttachment(100, -10);
    fd_btnEditPayments.bottom = new FormAttachment(100);
    btnEditPayments.setLayoutData(fd_btnEditPayments);
    btnEditPayments.setText("Edit Payments");

    Button btnViewPayments = new Button(composite_1, SWT.NONE);
    FormData fd_btnViewPayments = new FormData();
    fd_btnViewPayments.right = new FormAttachment(btnAddNew_2, 0,    SWT.RIGHT);
    fd_btnViewPayments.top = new FormAttachment(0, 6);
    fd_btnViewPayments.left = new FormAttachment(btnAddNew_2, 0, SWT.LEFT);
    btnViewPayments.setLayoutData(fd_btnViewPayments);
    btnViewPayments.setText("View Payments");

    ExpandItem xpndtmOurTools = new ExpandItem(expandBar, SWT.NONE);
    xpndtmOurTools.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/tools.png"));
    xpndtmOurTools.setText("Tools Available");

    Composite composite_3 = new Composite(expandBar, SWT.NONE);
    xpndtmOurTools.setControl(composite_3);
    xpndtmOurTools.setHeight(80);
    composite_3.setLayout(new FormLayout());

    Button btnViewTools = new Button(composite_3, SWT.NONE);
    FormData fd_btnViewTools = new FormData();
    fd_btnViewTools.top = new FormAttachment(0, 10);
    fd_btnViewTools.right = new FormAttachment(100, -10);
    fd_btnViewTools.left = new FormAttachment(100, -131);
    btnViewTools.setLayoutData(fd_btnViewTools);
    btnViewTools.setText("View Tools");

    Button btnAddNew_3 = new Button(composite_3, SWT.NONE);
    btnAddNew_3.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            System.out.println("Add tools");
        }
    });
    FormData fd_btnAddNew_3 = new FormData();
    fd_btnAddNew_3.right = new FormAttachment(btnViewTools, 0, SWT.RIGHT);
    fd_btnAddNew_3.top = new FormAttachment(btnViewTools, 6);
    fd_btnAddNew_3.left = new FormAttachment(btnViewTools, 0, SWT.LEFT);
    btnAddNew_3.setLayoutData(fd_btnAddNew_3);
    btnAddNew_3.setText("Add New");

    ExpandItem xpndtmReports = new ExpandItem(expandBar, SWT.NONE);
    xpndtmReports.setExpanded(true);
    xpndtmReports.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/reports.png"));
    xpndtmReports.setText("Reports");
    xpndtmReports.setHeight(80);

    Composite composite_2 = new Composite(expandBar, SWT.NONE);
    xpndtmReports.setControl(composite_2);
    composite_2.setLayout(new FormLayout());

    Button btnGenerateReport = new Button(composite_2, SWT.NONE);
    btnGenerateReport.setImage(SWTResourceManager.getImage(Dashboard.class,
            "/resource/icons/gen_report.png"));
    FormData fd_btnGenerateReport = new FormData();
    fd_btnGenerateReport.top = new FormAttachment(0, 10);
    fd_btnGenerateReport.left = new FormAttachment(0, 10);
    fd_btnGenerateReport.right = new FormAttachment(100, -28);
    btnGenerateReport.setLayoutData(fd_btnGenerateReport);
    btnGenerateReport.setText("Generate Report");
    xpndtmReports.setHeight(100);

    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
      }
     }
    }

任何人都可以提出解决方案。提前致谢。

最后我找到了代码中的问题。基本布局中的组合按如下方式分配了 StackLayout。

Composite content = new Composite(shell, SWT.BORDER);    
content.setLayout(new StackLayout());    
content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

当我将 StackLayout 更改为 GridLayout 时,我得到了一个可行的解决方案。

    Composite content = new Composite(shell, SWT.BORDER);       
    content.setLayout(new GridLayout(1, false));
    content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));