如何使用swt.TabItem添加关闭按钮? [英] how to add close button with 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屋!