JFace的FieldDecorationDecoratedField 使用详解

xiaoxiao2024-10-26  10

[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 核心应用光盘源码
转载请注明原文地址: https://www.6miu.com/read-5018559.html

最新回复(0)