Eclipse 在TableViewer中显示原始字符的密码样式TextCellEditor

Eclipse 在TableViewer中显示原始字符的密码样式TextCellEditor,eclipse,eclipse-rcp,jface,eclipse-plugin,Eclipse,Eclipse Rcp,Jface,Eclipse Plugin,TextCellEditorpassEdit具有SWT.PASSWORD样式。但是,当单击“添加”按钮时,会显示原始字符,而不是默认的*回显字符。另外,请将听众的注意力集中在密码编辑上。i、 e当用户双击时,应显示原始字符,在焦点丢失时,应显示密码回显字符 如何解决这个问题 public类UserAddSolution{ 公共静态布尔标志=true; 私有TextCellEditor用户名编辑; 私有文本编辑器passEdit; 类UserNamePassword{ 私有最终字符串名; 私有最终

TextCellEditor
passEdit具有SWT.PASSWORD样式。但是,当单击“添加”按钮时,会显示原始字符,而不是默认的*回显字符。另外,请将听众的注意力集中在密码编辑上。i、 e当用户双击时,应显示原始字符,在焦点丢失时,应显示密码回显字符

如何解决这个问题

public类UserAddSolution{
公共静态布尔标志=true;
私有TextCellEditor用户名编辑;
私有文本编辑器passEdit;
类UserNamePassword{
私有最终字符串名;
私有最终字符串密码;
公共用户名密码(字符串名称、字符串密码){
this.name=名称;
this.password=密码;
}
公共字符串getName(){
返回名称;
}
公共字符串getPassword(){
返回密码;
}
}
公共用户添加解决方案(最终Shell){
shell.setLayout(新的GridLayout(2,false));
GridData layoutData=新建GridData();
layoutData.heightHint=300;
shell.setLayoutData(layoutData);
最终的TableViewer=新的TableViewer(shell,SWT.BORDER
|SWT.FULL|U选择| SWT.MULTI);
setContentProvider(ArrayContentProvider.getInstance());
Table=viewer.getTable();
table.setLayout(新的GridLayout());
表.setLayoutData(layoutData);
userNameEdit=新的TextCellEditor(表格);
passEdit=新的TextCellEditor(表,SWT.PASSWORD);
最终文本tex=(Text)passEdit.getControl();
最终字符echar=tex.getEchoChar();
tex.addFocusListener(新FocusListener(){
@凌驾
公共无效焦点丢失(焦点事件e){
tex.setEchoChar(echar);
}
@凌驾
获得公共无效焦点(焦点事件e){
tex.setEchoChar('\0');
}
});
setCellEditor(新的CellEditor[]{usernamedit,passEdit});
viewer.setCellModifier(新的ICellModifier(){
@凌驾
公共布尔值canModify(对象元素,字符串属性){
返回true;
}
@凌驾
公共对象getValue(对象元素,字符串属性){
UserNamePassword ele=(UserNamePassword)元素;
if(属性等于(“1”)){
返回ele.getName();
}else if(属性等于(“2”)){
返回ele.getPassword();
}
返回“”;
}
@凌驾
公共void修改(对象元素、字符串属性、对象值){
}
});
setColumnProperties(新字符串[]{“1”,“2”});
ColumnViewerEdit或ActivationStrategy actSupport=新ColumnViewerEdit或ActivationStrategy(
(观众){
@凌驾
受保护的布尔isEditorActivationEvent(
ColumnViewerEdit或ActivationEvent(事件){
return event.eventType==ColumnViewerEdit或ActivationEvent.TRAVERSAL
||event.eventType==ColumnViewerEdit或ActivationEvent.MOUSE\u双击\u选择
||event.eventType==ColumnViewerEdit或ActivationEvent.Programming;
}
};
int feature=ColumnViewerEditor.tabing\u水平
|ColumnViewerEditor.TABBING\将\移动到\行\邻居
|ColumnViewerEditor.TABBING_垂直
|ColumnViewerEditor.KEYBOARD_激活;
TableViewerEditor.create(查看器、actSupport、功能);
TableViewerColumnUsernameColumn;
userNameColumn=newTableViewerColumn(查看器,SWT.NONE);
userNameColumn.getColumn().setWidth(200);
userNameColumn.getColumn().setMoveable(true);
userNameColumn.getColumn().setText(“名称”);
userNameColumn.setLabelProvider(新ColumnLabelProvider(){
@凌驾
公共映像getImage(对象元素){
返回super.getImage(元素);
}
@凌驾
公共字符串getText(对象元素){
UserNamePassword fdf=(UserNamePassword)元素;
返回super.getText(fdf.getName());
}
});
TableViewerColumn密码列;
passwordColumn=新的TableViewerColumn(查看器,SWT.NONE);
passwordColumn.getColumn().setWidth(200);
passwordColumn.getColumn().setMoveable(true);
passwordColumn.getColumn().setText(“密码”);
passwordColumn.setLabelProvider(新ColumnLabelProvider(){
@凌驾
公共映像getImage(对象元素){
返回super.getImage(元素);
}
@凌驾
公共字符串getText(对象元素){
UserNamePassword fdf=(UserNamePassword)元素;
返回super.getText(fdf.getPassword());
}
@凌驾
公共无效更新(ViewerCell单元格){
超级更新(单元);
}
});
setInput(新的ArrayList());
表.setLinesVisible(真);
表.setheadervible(true);
viewer.refresh();
按钮添加=新按钮(外壳,SWT.PUSH);
add.setText(“添加”);
add.addSelectionListener(新建SelectionListener(){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
添加(新用户名密码(“abc”、“xyz”);
}
@凌驾
公共无效widgetDefaultSelected(SelectionEvent e){
}
});
}
公共静态void main(字符串[]args){