如何使用swt.TabItem添加关闭按钮? [英] how to add close button with swt.TabItem?

查看:158
本文介绍了如何使用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

I have an swt.TabFolder and there are some swt.TabItems on it. i want to have a close button with those TabItems so i may close the tabs i want on runtime. and i dont want to use CTabFolder or CTabItem

有人可以告诉我该怎么办?

can someone tell me what can i do for this purpose?

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

        });
}


推荐答案

TabItem 没有此功能(它将忽略您使用的 SWT.CLOSE 样式)。除了使用 CTabItem 而是使用样式 SWT.CLOSE 。您还必须用 CTabFolder 替换 TabFolder

The TabItem doesn't have this functionality (it will ignore the SWT.CLOSE style you use). There is no other way (I know of) than using CTabItem instead and use the style SWT.CLOSE. You will have to replace TabFolder with CTabFolder as well.

参见页面或这个页面就是一个很好的例子。

See this page or this page for a good example.

或者,如果你不能离开 TabItem ,您可以使用 item.setImage(xImage); x 图像c $ c>并在文件夹中添加 Listener ,处理关闭内容。当然, x 项目将在左侧,而不是右侧......

Alternatively, if you cannot step away from TabItem, you could add an x image to each tab by using item.setImage(xImage); and adding a Listener to the folder, handling the "closing stuff". Of course, the x item will then be on the left, instead of the right...

管理到让它工作。只需用您的关闭图像替换 img / x.gif (进行测试,您可以使用: display.getSystemImage(SWT.ICON_ERROR)):

Managed to get it working. Just replace the img/x.gif with your close image (for testing, you can use: display.getSystemImage(SWT.ICON_ERROR)):

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

    final TabFolder folder = new TabFolder(shell, SWT.NONE);

    TabItem item = new TabItem(folder, SWT.NONE);
    item.setImage(Images.loadImage("img/x.gif"));
    item.setText("Text");

    TabItem item2 = new TabItem(folder, SWT.NONE);
    item2.setImage(Images.loadImage("img/x.gif"));
    item2.setText("Text2");

    folder.addMouseListener(new MouseListener() {

        @Override
        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");
            }
        }

        @Override
        public void mouseDown(MouseEvent arg0) {
        }

        @Override
        public void mouseDoubleClick(MouseEvent arg0) {
        }
    });

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

结果如下:

关闭前:

关闭后:

这篇关于如何使用swt.TabItem添加关闭按钮?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆