在swt中,Hyperlink可以实现 '点击跳转' 的效果。例如,在PDE的MANIFEST.MF的 Activator 点击该标签可以跳转到对应的Activator的类。
org.eclipse.pde.internal.ui.editor.plugin.rows.ReferenceAttributeRow.createLabel(Composite, FormToolkit)
protected void createLabel(Composite parent, FormToolkit toolkit) {
if (!part.isEditable()) {
super.createLabel(parent, toolkit);
return;
}
Hyperlink link = toolkit.createHyperlink(parent, getPropertyLabel(), SWT.NULL);
link.addHyperlinkListener(new HyperlinkAdapter() {
public void linkActivated(HyperlinkEvent e) {
if (!isReferenceModel()) {
openReference(); // !!!Action
} else {
Display.getCurrent().beep();
}
}
});
PDETextHover.addHoverListenerToControl(fIC, link, this);
}
如果需要在TreeItem上实现这样的效果需要怎么做呢?需要实现下面的UI显示:
1、 TreeItem的显示的Label需要有下划线
2、 文字颜色
在印象中,swt有一个paint的事件:SWT.Paint可以在发生paint事件,对元素UI进行重绘:
org.eclipse.swt.widgets.Control.addPaintListener(PaintListener)
public void addPaintListener (PaintListener listener) {
checkWidget ();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
addListener (SWT.Paint,typedListener); //!!!
}
但是TreeItem不是继承自Control。同时也没有重绘的事件发生。
Object
---Widget
------Item
---------TreeItem
在google后,找到了 http://www.iteye.com/topic/1113343 的文章,TreeItem可以通过Tree的SWT.PaintItem时来重绘。实现代码如下:
// 1> 修改字体颜色
this.tree.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
tree.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (e.detail == SWT.CHECK) {
TreeItem item = (TreeItem) e.item;
handleChanged((EObject) item.getData(), item.getChecked());
} else {
// 3> 点击open
openReference(e.item.getData());
}
}
});
/**
* 2> 加下划线
*/
tree.addListener(SWT.PaintItem, new Listener() {
public void handleEvent(Event event) {
TreeItem item = (TreeItem) event.item;
Rectangle bounds = item.getBounds();
int textHeight = bounds.height;
int textWidth = bounds.width;
// 默认paint已经绘制了Text
//event.gc.drawText(item.getText(), bounds.x, bounds.y, true);
int descent = event.gc.getFontMetrics().getDescent();
int lineY = bounds.y + textHeight - descent + 1;
event.gc.drawLine(bounds.x, lineY, bounds.x + textWidth, lineY);
}
});
http://www.iteye.com/topic/1113343 写道
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class Snippet300 {
private static int IMAGE_MARGIN = 2;
private static Image xImage;
private static Display display;
public static void main(String[] args) {
display = new Display();
Shell shell = new Shell(display);
shell.setBounds(10, 10, 350, 200);
createImage();
final Tree tree = new Tree(shell, SWT.CHECK);
tree.setBounds(10, 10, 300, 150);
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setImage(xImage);
item.setText("root item");
for (int i = 0; i < 4; i++) {
TreeItem newItem = new TreeItem(item, SWT.NONE);
newItem.setText("descendent " + i);
// if (i % 2 == 0) {
// newItem.setData(xImage);
// }
newItem.setImage(xImage);
item.setExpanded(true);
item = newItem;
}
treeAddListener(tree);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
xImage.dispose();
display.dispose();
}
private static void createImage() {
xImage = new Image(display, 16, 16);
GC gc = new GC(xImage);
gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
gc.drawLine(1, 1, 14, 14);
gc.drawLine(1, 14, 14, 1);
gc.drawOval(2, 2, 11, 11);
gc.dispose();
}
private static void treeAddListener(final Tree tree) {
Listener listener = new Listener() {
public void handleEvent(Event event) {
TreeItem item = (TreeItem) event.item;
Image image = (Image) item.getImage();
switch (event.type) {
case SWT.MeasureItem: {
if (image == null)
break;
event.width += 2 * (image.getBounds().width + IMAGE_MARGIN);
break;
}
case SWT.EraseItem: {
event.detail &= ~SWT.FOREGROUND;
break;
}
case SWT.PaintItem: {
if (image == null)
break;
int x, y;
int itemH = tree.getItemHeight();
int imageH = image.getBounds().height;
int imageW = image.getBounds().width;
// draw the 1 image
x = event.x;
y = event.y + (itemH - imageH) / 2;
event.gc.drawImage(image, x, y);
// draw the 2 image
x += IMAGE_MARGIN + imageW;
event.gc.drawImage(image, x, y);
// draw the string
String text = item.getText();
x += IMAGE_MARGIN + imageW;
y = event.y + 2;
event.gc.drawText(text, x, y);
// draw the 3 image
x += event.width - imageW;
y = event.y + (itemH - imageH) / 2;
event.gc.drawImage(image, x, y);
break;
}
}
}
};
tree.addListener(SWT.MeasureItem, listener);
tree.addListener(SWT.EraseItem, listener);
tree.addListener(SWT.PaintItem, listener);
}
}
- 大小: 2.5 KB
- 大小: 2 KB
分享到:
相关推荐
2. **CSS样式文件**:用于定义jstree的视觉样式,包括节点的外观、展开/折叠的动画效果等。 3. **示例或教程**:可能包含HTML文件和示例数据,帮助用户了解如何在自己的项目中使用jstree。 4. **文档**:可能包含...
2. **ToggleButton**: 要在任意列放置展开/折叠按钮,我们可以自定义一个DataGridTemplateColumn,将ToggleButton作为CellTemplate,并通过数据绑定来控制其IsChecked属性,以此来实现展开和折叠的效果。同时,可以...
在IT行业中,树形控件(TREEITEM)是一种常见的用户界面元素,广泛应用于各种软件和应用程序中,用于展示层次结构的数据。"TREEITEM DOWNLOAD"这个标题暗示我们将探讨如何下载、安装以及使用与树形控件相关的资源,...
- 通常,我们会为每个TreeItem设置一个Widget(如Label、Hyperlink等)作为其显示内容,并在需要时添加事件监听器。 ```java TreeItem childItem = new TreeItem(new Label("子节点内容")); childItem....
TreeItem 组件包括了一个模板,用于显示树形结构的数据,并且可以递归调用自己来实现多级菜单递归效果。 五、CSS 样式 在本文中,我们使用 CSS 样式来美化我们的多级菜单递归效果。我们使用 CSS 样式来设置树形...
在TreeView的每个项模板中,嵌入一个DataGrid,当点击TreeItem时,DataGrid会显示与该TreeItem关联的详细数据。 3. **数据绑定** WPF的强项在于数据绑定,TreeTable的实现同样依赖于数据绑定。你需要一个数据模型...
自定义`QAbstractItemModel`主要是为了实现数据的高效存储和检索,以及定制化的数据操作。以下是一些关键步骤和知识点: 1. **继承自定义Model**:首先,你需要创建一个类继承自`QAbstractItemModel`。这个类将实现...
1. **数据模型**:定义一个数据类,例如`TreeItem`,包含数据字段如标题、子项列表以及表示当前状态的字段(是否展开)。这个类还需要提供方法来处理子项的添加、删除和展开/折叠操作。 2. **适配器**:创建一个`...
`TreeItem.cs`可能是用于树形结构的数据模型,而`album.sql`可能是数据库脚本,与图片放大功能的直接关系不大,但在实际项目中可能会用于存储和检索图片信息。 总结来说,C#实现图片放大功能的关键在于使用...
然而,它不仅可以用来显示线性的数据结构,还可以通过巧妙的设计实现树形视图。本文将深入探讨如何利用UITableView来构建一个TreeView,以实现iPhone上的树状数据展示。 首先,我们需要理解UITableView的基本工作...
本示例"QTreeView实现节点拖动.zip"着重展示了如何扩展`QTreeView`的功能,使其支持节点的拖放操作,这在数据管理、分类或重组等场景中非常实用。下面我们将详细讨论如何实现这个功能。 首先,要实现节点拖放,我们...
对于JavaFX,对应的树形控件是TreeView,它同样使用TreeItem类作为节点,并提供了类似的功能,如事件监听、样式定制等。JavaFX的TreeView在图形效果和性能上可能优于Swing的JTree。 9. **实际应用示例** 在实际...
在SWT中,我们可以使用`Tree`和`TreeItem`类来创建这样的效果。 首先,我们需要导入必要的SWT库: ```java import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt....
在iOS开发中,构建树形列表结构是一种常见的需求,它能够有效地展示层级关系的数据,比如文件系统、组织架构等。本篇文章将详细讲解如何在...在实际项目中,还可以结合手势识别、动画效果等技术,提升用户的操作体验。
在AngularJS中,实现Tree View效果常常涉及到递归指令的使用。这主要因为树形结构数据需要能够自我包含和扩展,而递归指令恰好能够处理这种自引用的情况。本示例将详细介绍如何通过AngularJS创建一个可扩展和交互的...
这可以通过自定义一个ActionScript类来实现,比如`TreeItem`,其中包含`label`(节点文本)和`selected`(复选状态)等属性。 ```actionscript public class TreeItem { public var label:String; public var ...
本篇将深入探讨如何在SmartGWT中实现树(Tree)的增删改功能。 首先,了解SmartGWT中的树(Tree)组件。Tree是一种可视化控件,可以显示层次结构的数据,通常用于展示目录结构、组织结构等。SmartGWT的Tree继承自...
对于树动画,我们可能需要自定义`Node`和`TreeItem`,并通过调整它们的位置、大小、颜色等属性来实现动画。例如,当一个节点被选中时,我们可以让其逐渐放大或改变颜色,以吸引用户的注意力。 除了基本的动画技巧,...
每个节点(`TreeItem`)可以包含子节点,形成一个层次结构。我们需要定义一个数据模型来存储树的数据,并将其与`TreeView`绑定。 接下来,我们将讨论如何将这一实现集成到Struts2、Spring和Hibernate的环境中。...