[b]关键代码:[/b]
IControlCreator controlCreator = new IControlCreator() { public Control createControl(final Composite parent, final int style) { Text text = new Text(parent, style); return text; } }; // 声明一个FieldDecoration, 注意命名, 不要和DecoratedField混淆. 指的是具体的小Tip的控件. // 可以自定义提示信息, 提示图片. final FieldDecoration decoration = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR); decoration.setDescription("Please Input 'OK'"); // decoration.setImage(image); final DecoratedField decoratedField = new DecoratedField(shell, SWT.BORDER, controlCreator); // DecoratedField.getLayoutControl()得到的是一个Composite,你的Control就是创建在这个Composite之上的. // 可以对这个Composite进行外围的布局. // 里面的Control是无法控制布局的, 是默认FormLayout, 且是占满整个Composite. decoratedField.getLayoutControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); // DecoratedField 的position // 左右: SWT.LEFT, SWT.RIGHT // 上下: SWT.TOP,SWT.BOTTOM // 使用上下和左右进行组合, 比如 SWT.RIGHT | SWT.TOP decoratedField.addFieldDecoration(decoration, SWT.RIGHT | SWT.TOP, false); decoratedField.hideDecoration(decoration); // 给这个Text添加Modify事件, 通过内容判断修改decoratedField的表现状态. ((Text) decoratedField.getControl()).addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { Text text = (Text) e.widget; if (text.getText().trim().equals("") || text.getText().trim().toUpperCase().equals("OK")) { decoratedField.hideDecoration(decoration); decoratedField.hideHover(); } else { decoratedField.showDecoration(decoration); decoratedField.showHoverText("Not OK !"); } } });
具体见代码里面的注释就可以明白了, 蛮简单的.
相关资源:Eclipse SWT/JFace 核心应用光盘源码