http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWTStyledText.htm 下有个SWT的StyledText例子

这个例子的演示效果为:按下F1后,界面开始使用粗体,再按一下,取消粗体
如何添加对数字字符着色的功能点?

解决方案如下:

①添加private boolean doColor = false;
②修改这段代码,添加对数字字符的判断(48-57是键盘上对应的那些数字,其余的是数字键盘对应的0到9)
styledText.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
switch (e.keyCode) {
case SWT.F1:
toggleBold();
break;
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
case 16777264:
case 16777265:
case 16777266:
case 16777267:
case 16777268:
case 16777269:
case 16777270:
case 16777271:
case 16777272:
toggleColoring();
break;
default:
// ignore everything else
}

③仿照toggleBold() 写出toggleColoring()
private void toggleColoring() {
Point selectionRange = styledText.getSelectionRange();
StyleRange style = new StyleRange(
selectionRange.x,
selectionRange.y,
ColorConstants.blue,
null,
SWT.NORMAL);
styledText.setStyleRange(style);
doColor = true;
}

④修改
styledText.addExtendedModifyListener(new ExtendedModifyListener() {
public void modifyText(ExtendedModifyEvent event) {
if (doBold) {
StyleRange style = new StyleRange(
event.start,
event.length,
null,
null,
SWT.BOLD);
styledText.setStyleRange(style);
}

}
});

这样一来,当敲出数字的时候,数字就被染上色了。

注意
if (doColor) {
..
event.start - event.length,
...
}

里的这句代码event.start - event.length,能保证刚刚被敲出的数字也被着色!如果仿照if(doBold)里的写成event.start ,则不可以!

自问自答,希望给后来者一些帮助
抱歉,写错了,第4个步奏为: styledText.addExtendedModifyListener(new ExtendedModifyListener() { public void modifyText(ExtendedModifyEvent event) {if (doColor) { StyleRange style = new StyleRange( event.start - event.length, event.length, ColorConstants.blue, null, SWT.NORMAL); styledText.setStyleRange(style); doColor = false; } } });

附带一张运行图


package swt_jface.demo4; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
public class WrapLines { 

Display display = new Display(); 
Shell shell = new Shell(display); 

Text text1; 
Text text2; 
String line = "abcdefghijklmnopqrstuvwxyz0123456789"; 

private void init() { 

text1 = new Text(shell, SWT.BORDER | SWT.MULTI); 
//text.setTextLimit(12); 
text1.setText(line); 
text2 = new Text(shell, SWT.BORDER | SWT.WRAP); 
text2.setText(line); 

public WrapLines() { 

shell.setLayout(new GridLayout(2, true)); 
(new Label(shell, SWT.NULL)).setText("SWT.BORDER |\nSWT.MUTLI"); 
(new Label(shell, SWT.NULL)).setText("SWT.BORDER |\nSWT.WRAP"); 
init(); 
GridData gridData = new GridData(GridData.FILL_BOTH); 
text1.setLayoutData(gridData); 

gridData = new GridData(GridData.FILL_BOTH); 
text2.setLayoutData(gridData); 
shell.pack(); 
shell.open(); 

while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

public static void main(String[] args) { 
new WrapLines(); 

}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答