如何设置swt tabitem无效?

时间:2011-12-06 09:43:55

标签: java tabs swt

我正在设计一个基于org.eclipse.swt.widgets.TabItem的gui。

有没有办法在TabItem内显示TabFolder为“无效”,即使用通常的浅灰色并且所有包含的元素都不活跃?

这是我可以设计的其他系统中的东西。我认为swt也是可能的,但我是这个环境的新手,在谷歌搜索这个主题后,我找不到任何解决方案。它有可能吗?

2 个答案:

答案 0 :(得分:6)

无法将TabItem设置为无效(已禁用),因为无法单击所选的TabItem。但是很容易禁用所选TabItem的内容。只需获取绑定到Control实例的TabItem并致电setEnable(false)

/*
 * TabFolder example snippet: create a tab folder (six pages)
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 */
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.*;

public class TabItemDisable {

public static void main (String [] args) {
    Display display = new Display ();
    final Shell shell = new Shell (display);
    final TabFolder tabFolder = new TabFolder (shell, SWT.BORDER);
    Rectangle clientArea = shell.getClientArea ();
    tabFolder.setLocation (clientArea.x, clientArea.y);
    for (int i=0; i<6; i++) {
        TabItem item = new TabItem (tabFolder, SWT.NONE);
        item.setText ("TabItem " + i);
        Button button = new Button (tabFolder, SWT.PUSH);
        button.setText ("Page " + i);
        item.setControl (button);
    }
    tabFolder.pack ();

    // disabling content of selected TabItems
    tabFolder.getTabList()[0].setEnabled(false);
    tabFolder.getTabList()[2].setEnabled(false);
    tabFolder.getTabList()[4].setEnabled(false);

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

答案 1 :(得分:1)

@Sorceror的答案非常酷。但是我有一点说明,代码

getTabList()在

tabFolder.getTabList()[0].setEnabled(false);
tabFolder.getTabList()[2].setEnabled(false);
tabFolder.getTabList()[4].setEnabled(false);

表示“选项卡顺序列表”而不是“选项卡项目”本身。因此,如果您想将某些设置为“启用”,则将其禁用(tabFolder.getTabList()[0] .setEnabled(true);),顺序可能不正确。