|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。条记|计划
本文部份内容和灵感来自eclipse.org网站,特此声明。更多内容,请参考:
http://eclipse.org/articles/Article-SWT-Design-1/SWT-Design-1.html
尽人皆知,SWT与Swing最年夜的分歧就是它间接利用操纵体系供应的现成的当地图形接口,因而具有当地化的Look&Feel。可是它是怎样做到这一点的呢,固然是经由过程JNI。我们来看一个例子,假定我们利用Win32的API。
我们如今有一个文本框text,经由过程以下的代码,我们给它一个字符串,并让它选择/highlight从3~5([3,5])的字符。
text.setText(“abcdefgh”);text.setSelection(3,6);
在Windows下,这个setSelection办法是怎样完成的呢?我们能够看看源码:
publicvoidsetSelection(intstart,intend){…OS.SendMessage(handle,OS.EM_SETSEL,start,end);OS.SendMessage(handle,OS.EM_SCROLLCARET,0,0);}
做过Windows编程的伴侣大概一会儿就认出了这个SendMessage,这不就是Win32API顶用于向窗体发送动静的函数吗?呵呵,没错,我们再来看一下这个SendMessage办法的原型:
publicstaticfinalintSendMessage(inthWnd,intMsg,intwParam,intlParam){if(IsUnicode)returnSendMessageW(hWnd,Msg,wParam,lParam);returnSendMessageA(hWnd,Msg,wParam,lParam);}publicstaticfinalnativeintSendMessageW(inthWnd,intMsg,intwParam,intlParam);publicstaticfinalnativeintSendMessageA(inthWnd,intMsg,intwParam,intlParam);
我们看到了两个版本,一个版本针对Unicode,另外一个版本针对ASCII,恰好Win32API也是云云,我们在这里看到的是native的办法,这意味着详细另有一组JNI的C代码来间接与操纵体系的函数打交道:
#ifndefNO_SendMessageW__IIIIJNIEXPORTjintJNICALLOS_NATIVE(SendMessageW__IIII)(JNIEnv*env,jclassthat,jintarg0,jintarg1,jintarg2,jintarg3){jintrc;OS_NATIVE_ENTER(env,that,SendMessageW__IIII_FUNC);rc=(jint)SendMessageW((HWND)arg0,arg1,(WPARAM)arg2,(LPARAM)arg3);OS_NATIVE_EXIT(env,that,SendMessageW__IIII_FUNC);returnrc;}#endif#ifndefNO_SendMessageA__IIIIJNIEXPORTjintJNICALLOS_NATIVE(SendMessageA__IIII)(JNIEnv*env,jclassthat,jintarg0,jintarg1,jintarg2,jintarg3){jintrc;OS_NATIVE_ENTER(env,that,SendMessageA__IIII_FUNC);rc=(jint)SendMessageA((HWND)arg0,arg1,(WPARAM)arg2,(LPARAM)arg3);OS_NATIVE_EXIT(env,that,SendMessageA__IIII_FUNC);returnrc;}#endif
看到这里,你大概已名顿开:SWT所做的不过就是把Win32的API复杂的包装了一下,我们在SWT这一层挪用的办法、传送的参数被一成不变的代办署理到了Win32层。这就是SWT的中心头脑。SWT有一个很主要的计划准绳,那就是,SWT的API一对一的封装OS的API,完整忠厚于操纵体系的API完成的举动,假如有bug,那也是OS的bug,它不会实验往“改正”操纵体系,由于那样会潜伏的损坏当地化的一些举动。忠厚于OS也使得挪用者不用但心本人的SWT程序会跟OS的当地GUI有纷歧致的中央,若有需要间接参考MSDN便可。SWT实在就是如许一个thinwrapper,我们经由过程它能够便利的会见Win32的图形API,为我们的使用程序供应native的Look&Feel。
上面给出一个完全的SWT示例:
packagesean.test.swt;importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.FillLayout;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Shell;importorg.eclipse.swt.widgets.Text;publicclassDummySWT{publicstaticvoidmain(String[]args){finalDisplaydisplay=newDisplay();finalShellshell=newShell(display);shell.setLayout(newFillLayout());finalTexttext=newText(shell,SWT.SINGLE);text.setText("abcdefgh");text.setSelection(3,6);shell.pack();shell.open();while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}}display.dispose();}}
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|