eclipse中console使用2

一不小心搜索到一篇文章,原来别人对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;
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值