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