一不小心搜索到一篇文章,原来别人对console的使用早就研究过了,而且更深入,更详细。真郁闷
下面是代码,略有修改
action
final String msg1 = "This is the first message\n";
final String msg2 = "This is the second message\n";
final String msg3 = "This is the third message\n";
final String linkText1 = "GO Google\n";
final String linkURL1 = "http://www.google.com";
final MyHyperLink link1= new MyHyperLink( linkURL1,linkText1);
Color color_blue = Display.getDefault().getSystemColor(SWT.COLOR_BLUE);
MyConsole myConsole = MyConsole.getMyConsole();
myConsole.addMsgToConsole(msg1, null);
myConsole.addMsgToConsole(msg2, color_blue);
myConsole.addLinkToConsole(link1, null);
myConsole.addMsgToConsole(msg3, null);
link
public class MyHyperLink implements IHyperlink {
private String text;
private URL url;
public MyHyperLink(String urlStr){
try {
this.url = new URL(urlStr);
this.text = urlStr;
} catch (MalformedURLException e) {
e.printStackTrace();
this.url = null;
this.text = null;
}
}
public MyHyperLink(String urlStr,String text){
try {
this.url = new URL(urlStr);
this.text = text;
} catch (MalformedURLException e) {
e.printStackTrace();
this.url = null;
this.text = null;
}
}
public String getText(){
return text;
}
public boolean valid(){
return url!=null;
}
@Override
public void linkActivated() {
if(url!=null){
try {
PlatformUI.getWorkbench().getBrowserSupport().createBrowser(text).openURL(url);
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
@Override
public void linkEntered(){System.out.println("link enter");}
@Override
public void linkExited() {System.out.println("link exit");}
}
console
public class MyConsole extends MessageConsole {
final public static String MYCONSOLE_NAME = "console.MyMessageConsole";
int addStrLen;
static class DocChangeListener implements IDocumentListener {
int lenBeforeChange;
int expectedlen;
final MyConsole myConsole;
final MyHyperLink myLink;
public DocChangeListener(MyConsole console, MyHyperLink link,int lenWanted) {
myConsole = console;
myLink = link;
expectedlen = lenWanted;
}
public void documentAboutToBeChanged(DocumentEvent event) {
}
public void documentChanged(final DocumentEvent event) {
int strLenAfterChange = event.getDocument().getLength();
if (strLenAfterChange >= expectedlen) {
Job job = new Job("MyMessageConsole.addLinkToConsole") {
public IStatus run(IProgressMonitor monitor) {
try {
myConsole.addHyperlink(myLink, expectedlen
- myLink.getText().length(), myLink
.getText().length());
} catch (Exception e) {
e.printStackTrace();
}
return Status.OK_STATUS;
}
};
job.schedule();
event.getDocument().removeDocumentListener(this);
}
}
}
public MyConsole() {
super(MYCONSOLE_NAME, null);
addStrLen = 0;
}
public void clearConsole() {
super.clearConsole();
this.addStrLen = 0;
}
public void addMsgToConsole(final String msg, final Color color) {
final MessageConsoleStream stream = this.newMessageStream();
if (color != null)
stream.setColor(color);
addStrLen += msg.length();
stream.print(msg); // "\n" will take length 1, so use print, not println
}
public void addLinkToConsole(final MyHyperLink link, Color color) {
if (link.valid()) {
try {
final MyConsole console = this;
final int currentStrLen = addStrLen;
addMsgToConsole(link.getText(), color);
console.getDocument().addDocumentListener(
new DocChangeListener(console, link, currentStrLen+ link.getText().length()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static MyConsole getMyConsole() {
IConsoleManager manager = ConsolePlugin.getDefault()
.getConsoleManager();
IConsole[] curConsoles = manager.getConsoles();
for (IConsole co : curConsoles) {
if (co.getName().equals(MYCONSOLE_NAME))
return (MyConsole) co;
}
MyConsole myConsole = new MyConsole();
manager.addConsoles(new IConsole[] { myConsole });
return myConsole;
}
}
eclipse中console使用2
最新推荐文章于 2024-05-30 16:27:56 发布