SWT(JFace)体验之StyledText类

页面导航:首页 > 软件编程 > Java编程 > SWT(JFace)体验之StyledText类

SWT(JFace)体验之StyledText类

来源:互联网 作者:脚本宝典 时间:2015-07-30 13:12 【

WrapLines.java 复制代码 代码如下: 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.

WrapLines.java 

复制代码代码如下:


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(); 

}


RemarksText.java

复制代码代码如下:


package swt_jface.demo4; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.ModifyEvent; 
import org.eclipse.swt.events.ModifyListener; 
import org.eclipse.swt.events.VerifyEvent; 
import org.eclipse.swt.events.VerifyListener; 
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 RemarksText { 

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

Text text; 
public RemarksText() { 

shell.setLayout(new GridLayout(1, false)); 
(new Label(shell, SWT.NULL)).setText("Remarks:"); 
text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); 
text.setText("123456789"); 
text.setLayoutData(new GridData(GridData.FILL_BOTH)); 
System.out.println("getText: " + text.getText(1, 6)); 
char[] chars = text.getLineDelimiter().toCharArray(); 
for (int i = 0; i < chars.length; i++) { 
System.out.println("Line delimiter #" + i + ": " + Integer.toHexString(chars[i]) ); 

text.getOrientation(); 
System.out.println("Number of chars: " + text.getCharCount()); 
System.out.println("Tabs: " + text.getTabs()); 
text.addVerifyListener(new VerifyListener() { 
public void verifyText(VerifyEvent e) { 
if(e.end == e.start) { 
if( e.character == ' ' && (e.stateMask & SWT.CTRL) != 0 ) { 
if(text.getText(e.end-1, e.end-1).equals("V")) { 
e.text = "erifyListener"; 
}else{ 
e.doit = false; 




}); 
text.addModifyListener(new ModifyListener() { 
public void modifyText(ModifyEvent e) { 
System.out.println("New character count: " + text.getCharCount()); 

}); 
// text.append("a"); 

text.setSelection(1, 4); 
System.out.println("getSelection:\t" + text.getSelection()); 
System.out.println("getSelectionCount:\t" + text.getSelectionCount()); 
System.out.println("getSelectionText:\t" + text.getSelectionText()); 
//text.insert("ABC"); 
// shell.pack(); 
shell.setSize(300, 150); 
shell.open(); 

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


display.dispose(); 

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

}


再比如密码框: 
UserPassword.java 

复制代码代码如下:


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 UserPassword { 

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

Text textUser; 
Text textPassword; 
private void init() { 

(new Label(shell, SWT.NULL)).setText("User name: "); 
textUser = new Text(shell, SWT.SINGLE | SWT.BORDER); 
textUser.setText("default_user"); 
textUser.setTextLimit(16); 
(new Label(shell, SWT.NULL)).setText("Password: "); 
textPassword = new Text(shell, SWT.SINGLE | SWT.BORDER); 
System.out.println(textPassword.getEchoChar()); 
textPassword.setEchoChar('*'); 


public UserPassword() { 

shell.setLayout(new GridLayout(2, false)); 
init(); 

textUser.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
textPassword.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 

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


display.dispose(); 

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

}


下面演示使用StyledText类进行修饰Text的几个例子: 

HighlightOddLine.java 

复制代码代码如下:


package swt_jface.demo4; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.LineBackgroundEvent; 
import org.eclipse.swt.custom.LineBackgroundListener; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
public class HighlightOddLine { 

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

StyledText styledText; 

public HighlightOddLine() { 

shell.setLayout(new GridLayout()); 
styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
styledText.setLayoutData(new GridData(GridData.FILL_BOTH)); 
styledText.addLineBackgroundListener(new LineBackgroundListener() { 
public void lineGetBackground(LineBackgroundEvent event) { 
if(styledText.getLineAtOffset(event.lineOffset) % 2 == 1) 
event.lineBackground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW); 

}); 

styledText.setText("Line 0\r\nLine 1\r\nLine 2\r\nLine 3\r\nLine 4\r\nLine 5\r\nLine 6"); 
shell.setSize(300, 150); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 

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

}


SetLineBackground.java 

复制代码代码如下:


package swt_jface.demo4; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.StyleRange; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
public class SetLineBackground { 

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

StyledText styledText; 
public SetLineBackground() { 
shell.setLayout(new GridLayout()); 
styledText = new StyledText(shell, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); 
styledText.setLayoutData(new GridData(GridData.FILL_BOTH)); 
Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL); 
styledText.setFont(font); 
styledText.setText("abcdefg\r\nhijklmn"); 
StyleRange styleRange1 = new StyleRange(); 
styleRange1.start = 2; 
styleRange1.length = 3; 
styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE); 
styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW); 
styleRange1.fontStyle = SWT.BOLD; 

styledText.setStyleRange(styleRange1); 
styledText.setLineBackground(0, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GREEN)); 
styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW)); 

shell.setSize(300, 120); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 


display.dispose(); 


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

}


SearchStyleText.java

复制代码代码如下:


package swt_jface.demo4; 
import java.util.LinkedList; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.LineStyleEvent; 
import org.eclipse.swt.custom.LineStyleListener; 
import org.eclipse.swt.custom.StyleRange; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
public class SearchStyleText { 

Display display = new Display(); 
Shell shell = new Shell(display); 
StyledText styledText; 
Text keywordText; 
Button button; 

String keyword; 

public SearchStyleText() { 

shell.setLayout(new GridLayout(2, false)); 
styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
GridData gridData = new GridData(GridData.FILL_BOTH); 
gridData.horizontalSpan = 2; 
styledText.setLayoutData(gridData); 
keywordText = new Text(shell, SWT.SINGLE | SWT.BORDER); 
keywordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 
Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL); 
styledText.setFont(font); 
button = new Button(shell, SWT.PUSH); 
button.setText("Search"); 
button.addSelectionListener(new SelectionAdapter() { 
public void widgetSelected(SelectionEvent e) { 
keyword = keywordText.getText(); 
styledText.redraw(); 

}); 

styledText.addLineStyleListener(new LineStyleListener() { 
public void lineGetStyle(LineStyleEvent event) { 
if(keyword == null || keyword.length() == 0) { 
event.styles = new StyleRange[0]; 
return; 

String line = event.lineText; 
int cursor = -1; 
LinkedList list = new LinkedList(); 
while( (cursor = line.indexOf(keyword, cursor+1)) >= 0) { 
list.add(getHighlightStyle(event.lineOffset+cursor, keyword.length())); 

event.styles = (StyleRange[]) list.toArray(new StyleRange[list.size()]); 

}); 

keyword = "SW"; 
styledText.setText("AWT, SWING \r\nSWT & JFACE"); 

shell.pack(); 
shell.open(); 

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


display.dispose(); 


private StyleRange getHighlightStyle(int startOffset, int length) { 

StyleRange styleRange = new StyleRange(); 
styleRange.start = startOffset; 
styleRange.length = length; 
styleRange.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW); 
return styleRange; 

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

}


SampleStyledText.java 

复制代码代码如下:


package swt_jface.demo4; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.StyleRange; 
import org.eclipse.swt.custom.StyledText; 
import org.eclipse.swt.graphics.Font; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
public class SampleStyledText { 

Display display = new Display(); 
Shell shell = new Shell(display); 
StyledText styledText; 
public SampleStyledText() { 

shell.setLayout(new GridLayout()); 
styledText = new StyledText(shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
styledText.setLayoutData(new GridData(GridData.FILL_BOTH)); 
Font font = new Font(shell.getDisplay(), "Courier New", 12, SWT.NORMAL); 
styledText.setFont(font); 
styledText.setText("123456789\r\nABCDEFGHI"); 

StyleRange styleRange1 = new StyleRange(); 
styleRange1.start = 2; 
styleRange1.length = 16; 
styleRange1.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE); 
styleRange1.background = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW); 
styleRange1.fontStyle = SWT.BOLD; 

StyleRange styleRange2 = new StyleRange(); 
styleRange2.start = 14; 
styleRange2.length = 3; 
styleRange2.fontStyle = SWT.NORMAL; 
styleRange2.foreground = shell.getDisplay().getSystemColor(SWT.COLOR_YELLOW); 
styleRange2.background = shell.getDisplay().getSystemColor(SWT.COLOR_BLUE); 

// styledText.setStyleRange(styleRange1); 
// styledText.setStyleRange(styleRange2); 
//styledText.setStyleRanges(new StyleRange[]{styleRange1, styleRange2}); 
//styledText.setStyleRanges(new StyleRange[]{styleRange2, styleRange1}); 
//styledText.setLineBackground(1, 1, shell.getDisplay().getSystemColor(SWT.COLOR_GRAY)); 
// styledText.setSelection(4); 
// System.out.println(printStyleRanges(styledText.getStyleRanges()) ); 
// styledText.insert("000"); 

System.out.println(printStyleRanges(styledText.getStyleRanges()) ); 
// styledText.setStyleRanges(new StyleRange[]{styleRange1}); 
// System.out.println(printStyleRanges(styledText.getStyleRanges()) ); 

//shell.pack(); 
shell.setSize(300, 120); 
shell.open(); 

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


display.dispose(); 


private String printStyleRanges(StyleRange[] styleRanges) { 
if(styleRanges == null) 
return "null"; 
else if(styleRanges.length == 0) 
return "[]"; 
StringBuffer sb = new StringBuffer(); 
for(int i=0; i<styleRanges.length; i++) { 
sb.append(styleRanges[i] + "\n"); 

return sb.toString(); 

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

}


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<