如何使用swt.TabItem添加关闭按钮?

时间:2012-08-07 10:37:20

标签: java swt tabitem

TabFolder tabFolder = new TabFolder(composite, SWT.CLOSE);      

TabItem tab1 = new TabItem(tabFolder, SWT.CLOSE);
tab1.setText("Tab 1");

TabItem tab2 = new TabItem(tabFolder, SWT.CLOSE);
tab2.setText("Tab 2");

我有一个swt.TabFolder,上面有一些swt.TabItems。 我希望有一个关闭按钮与那些TabItems所以我可以关闭我想要的运行时选项卡。 我不想使用CTabFolder或CTabItem

有人可以告诉我,我能为此目的做些什么吗?

public DomainUI(Composite composite, TabFolder newTabFolder, boolean comingFromSelf)
    {       
        boolean itemsDisposed = false;
        TabItem[] itemsOnTabFolder = newTabFolder.getItems();
        String[] namesOfItemsOnTabFolder = new String[itemsOnTabFolder.length];
        if(comingFromSelf) // checking when to dispose other tabs
        {
            if(itemsOnTabFolder.length != 0)
            {
                for(int i=0; i<itemsOnTabFolder.length; i++)
                {
                    namesOfItemsOnTabFolder[i] = itemsOnTabFolder[i].getText();
                    itemsOnTabFolder[i].dispose();
                }
                itemsDisposed = true;
            }
        }
        final Composite compositeInTab = new Composite(newTabFolder, SWT.NONE);
        compositeInTab.setLayout(null);

        // CREATIION OF LABELS AND TEXTFIELDS
        systemCodeLabel = new Label(compositeInTab, 0);
        systemCodeText = new Text(compositeInTab, SWT.BORDER);

        domainNameLabel = new Label(compositeInTab, 0);
        domainNameText = new Text(compositeInTab, SWT.BORDER);

        organizationalUnitLabel = new Label(compositeInTab, 0);
        organizationalUnitText = new Text(compositeInTab, SWT.BORDER);

        organizationNameLabel = new Label(compositeInTab, 0);
        organizationNameText = new Text(compositeInTab, SWT.BORDER);

        systemCodeLabel.setText("System Code");
        domainNameLabel.setText("Domain Name");
        organizationalUnitLabel.setText("Organizational Unit");
        organizationNameLabel.setText("Organization Name");
newTabFolder.addMouseListener(new MouseAdapter() 
        {
            public void mouseUp(MouseEvent arg0)
            {
                TabFolder curFolder = (TabFolder)arg0.widget;
                Point eventLocation = new Point(arg0.x, arg0.y);
                TabItem item = curFolder.getItem(eventLocation);
                if(item == null)
                    return;

                Image image = item.getImage();

                // check if click is on image
                if(        eventLocation.x >= item.getBounds().x + image.getBounds().x && eventLocation.x <= item.getBounds().x + image.getBounds().x + image.getBounds().width
                        && eventLocation.y >= item.getBounds().y + image.getBounds().y && eventLocation.y <= item.getBounds().y + image.getBounds().y + image.getBounds().height)
                {
                    System.out.println("Close tab");
                    item.dispose();
                }
                else
                {
                    System.out.println("Don't close tab");
                }
            }

        });
}

1 个答案:

答案 0 :(得分:6)

TabItem没有此功能(它将忽略您使用的SWT.CLOSE样式)。没有其他方式(我知道)而不是使用CTabItem而是使用样式SWT.CLOSE。您还必须将TabFolder替换为CTabFolder

请参阅this页面或this页面以获取一个好例子。

或者,如果您无法离开TabItem,则可以使用x并添加{{1}为每个标签添加item.setImage(xImage);图片到文件夹,处理“结束东西”。当然,Listener项目将在左侧,而不是右侧......

管理以使其正常运行。只需将x替换为您的近距离图像(进行测试,您可以使用:img/x.gif):

display.getSystemImage(SWT.ICON_ERROR)

结果如下:

关闭前:

Before closing

关闭后:

After closing