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");
}
}
});
}
最佳答案
TabItem
没有此功能(它将忽略您使用的 SWT.CLOSE
样式)。除了使用 CTabItem
没有其他方法(我知道)而是使用样式 SWT.CLOSE
。您还必须将 TabFolder
替换为 CTabFolder
。
或者,如果您不能离开TabItem
,您可以使用item 向每个选项卡添加一个
并将 x
图像。 setImage(xImage);Listener
添加到文件夹,处理“关闭内容”。当然,x
项将位于左侧,而不是右侧...
设法让它工作。只需将 img/x.gif
替换为您的关闭图像(为了测试,您可以使用: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();
}
}
结果是这样的:
关闭前:
关闭后:
关于java - 如何使用 swt.TabItem 添加关闭按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844119/