é¦å
è¦å¨Eclipseå®è£
æ件ä¸æ¾å°SWTå
ï¼Eclipseç»ç»å¹¶ä¸æä¾åç¬çSWTå
ä¸è½½ï¼å¿
é¡»ä¸è½½å®æ´çEclipseå¼åç¯å¢æè½å¾å°SWTå
ãSWTæ¯ä½ä¸ºEclipseå¼åç¯å¢çä¸ä¸ªæ件形å¼åå¨ï¼å¯ä»¥å¨$ï½ä½ çeclipseå®è£
è·¯å¾ï½\pluginsè·¯å¾ä¸çä¼å¤åç®å½ä¸å»æç´¢SWT.JARæ件ï¼å¨æ¾å°çJARæ件ä¸å
å«äºSWTå
¨é¨çJavaç±»æ件ãå 为SWTåºç¨äºJNIææ¯ï¼å æ¤åæ¶ä¹è¦æ¾å°ç¸å¯¹åºçJNIæ¬å°ååºæ件ï¼ç±äºçæ¬åæä½å¹³å°çä¸åï¼æ¬å°ååºæ件çå称ä¼æäºå·®å«ï¼æ¯å¦SWT-WIN32-2116.DLLæ¯Windowå¹³å°ä¸Eclipse Build 2116çå¨æåºï¼èå¨Unixå¹³å°ç¸åºçæ¬çåºæ件çæ©å±ååºè¯¥æ¯.soï¼ççã注æçæ¯ï¼Eclipseæ¯ä¸ä¸ªå¼æ¾æºä»£ç ç项ç®ï¼å æ¤ä½ ä¹å¯ä»¥å¨è¿äºç®å½ä¸æ¾å°SWTçæºä»£ç ï¼ç¸ä¿¡è¿ä¼å¯¹å¼åå¾æ帮å©ãä¸é¢æ¯ä¸æ®µæå¼ç©ºçªå£ç代ç (åªæmainæ¹æ³)ã
import com.e2one.example;
public class OpenShell{
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
// å¼å§äºä»¶å¤ç循ç¯ï¼ç´å°ç¨æ·å
³éçªå£
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
确信å¨CLASSPATHä¸å
æ¬äºSWT.JARæ件ï¼å
ç¨Javacç¼è¯ä¾åç¨åºãç¼è¯æ éåå¯è¿è¡java -Djava.library.path=${ä½ çSWTæ¬å°åºæ件æå¨è·¯å¾} com.e2one.example.OpenShellï¼æ¯å¦SWT-WIN32-2116.DLL件æå¨çè·¯å¾æ¯C:\swtlibï¼è¿è¡çå½ä»¤åºè¯¥æ¯java -Djava.library.path=c:\swtlib com.e2one.example.OpenShellãæåè¿è¡åï¼ç³»ç»ä¼æå¼äºä¸ä¸ªç©ºççªå£ã
åæSWT API
ä¸é¢å让æ们è¿ä¸æ¥åæSWT APIçç»æãææçSWTç±»é½ç¨org.eclipse.swtå为å
çåç¼ï¼ä¸é¢ä¸ºäºç®å说æï¼æ们ç¨*å·ä»£è¡¨åç¼org.eclipse.swtï¼æ¯å¦*.widgetså
ï¼ä»£è¡¨çæ¯org.eclipse.swt.widgetså
ã
æ们æ常ç¨çå¾å½¢æ件åºæ¬é½è¢«å
æ¬å¨*.widgetså
ä¸ï¼æ¯å¦Buttonï¼Comboï¼Textï¼Labelï¼Sashï¼Tableççãå
¶ä¸ä¸¤ä¸ªæéè¦çæ件å½æ°ShellåCompositeãShellç¸å½äºåºç¨ç¨åºç主çªå£æ¡æ¶ï¼ä¸é¢çä¾å代ç ä¸å°±æ¯åºç¨Shellæ件æå¼ä¸ä¸ªç©ºçªå£ãCompositeç¸å½äºSWINGä¸çPanel对象ï¼å
å½çæ件容å¨çè§è²ï¼å½æ们æ³å¨ä¸ä¸ªçªå£ä¸å å
¥ä¸äºæ件æ¶ï¼æ好å°ä½¿ç¨Compositeä½ä¸ºå
¶å®æ件ç容å¨ï¼ç¶ååå»*.layoutå
æ¾åºä¸ç§åéçå¸å±æ¹å¼ãSWT对æ件çå¸å±ä¹éç¨äºSWINGæAWTä¸LayoutåLayout Dataç»åçæ¹å¼ï¼å¨*.layoutå
ä¸å¯ä»¥æ¾å°åç§Layoutåä¸å®ä»¬ç¸å¯¹åºçå¸å±ç»æ对象ï¼Layout Dataï¼ãå¨*.customå
ä¸ï¼å
å«äºå¯¹ä¸äºåºæ¬å¾å½¢æ件çæ©å±ï¼æ¯å¦å
¶ä¸çCLabelï¼å°±æ¯å¯¹æ åLabelæ件çæ©å±ï¼ä¸é¢å¯ä»¥åæ¶å å
¥æååå¾çï¼ä¹å¯ä»¥å è¾¹æ¡ãStyledTextæ¯Textæ件çæ©å±ï¼å®æä¾äºä¸°å¯çææ¬åè½ï¼æ¯å¦å¯¹æ段æåçèæ¯è²ãåæ¯è²æåä½ç设置ãå¨*.customå
ä¸ä¹å¯æ¾å°ä¸ä¸ªæ°çStackLayoutå¸å±æ¹å¼ã
SWT对ç¨æ·æä½çååºï¼æ¯å¦é¼ æ æé®çäºä»¶ï¼ä¹æ¯éç¨äºAWTåSWINGä¸çObserver模å¼ï¼å¨*.eventå
ä¸å¯ä»¥æ¾å°äºä»¶çå¬çListeneræ¥å£åç¸åºçäºä»¶å¯¹è±¡ï¼ä¾å¦å¸¸ç¨çé¼ æ äºä»¶çå¬æ¥å£MouseListenerï¼MouseMoveListeneråMouseTrackListenerï¼å对åºçäºä»¶å¯¹è±¡MouseEventã
*.graphicså
ä¸å¯ä»¥æ¾å°é对å¾çãå
æ ãåä½æç»å¾çAPIãæ¯å¦å¯éè¿Imageç±»è°ç¨ç³»ç»ä¸ä¸åç±»åçå¾çæ件ãéè¿GCç±»å®ç°å¯¹å¾çãæ件ææ¾ç¤ºå¨çç»å¾åè½ã
对ä¸åå¹³å°ï¼Eclipseè¿å¼åäºä¸äºå¯æé对æ§çAPIãä¾å¦ï¼å¨Windowså¹³å°ï¼å¯ä»¥éè¿*.ole.win32å
å¾å®¹æçè°ç¨oleæ§ä»¶ï¼è¿ä½¿Javaç¨åºå
åµIEæµè§å¨æWordãExcelçç¨åºæ为å¯è½ï¼
æ´å¤æçç¨åº
ä¸é¢è®©æ们å±ç¤ºä¸ä¸ªæ¯ä¸é¢ä¾åæ´å å¤æä¸äºçç¨åºãè¿ä¸ªç¨åºæ¥æä¸ä¸ªææ¬æ¡åä¸ä¸ªæé®ï¼å½ç¨æ·ç¹å»æé®çæ¶åï¼ææ¬æ¡æ¾ç¤ºä¸å¥æ¬¢è¿ä¿¡æ¯ã
为äºææ¬æ¡åæé®ææ¯è¾åçç大å°åå¸å±ï¼è¿ééç¨äºGradLayoutå¸å±æ¹å¼ãè¿ç§å¸å±æ¯SWTä¸æ常ç¨ä¹æ¯æ强大çå¸å±æ¹å¼ï¼å ä¹ææçæ ¼å¼é½å¯è½éè¿GradLayoutå»è¾¾å°ãä¸é¢çç¨åºä¹æ¶åå°äºå¦ä½åºç¨ç³»ç»èµæº(Color)ï¼ä»¥åå¦ä½éæ¾ç³»ç»èµæºã
private void initShell(Shell shell) {
//为Shell设置å¸å±å¯¹è±¡
GridLayout gShellLay = new GridLayout();
shell.setLayout(gShellLay);
//æé ä¸ä¸ªCompositeæ件ä½ä¸ºææ¬æ¡åæé®ç容å¨
Composite panel = new Composite(shell,SWT.NONE);
//为Panelæå®ä¸ä¸ªå¸å±ç»æ对象ã
è¿é让Panelå°½å¯è½çå 满Shellï¼
ä¹å°±æ¯å
¨é¨åºç¨ç¨åºçªå£ç空é´ã
GridData gPanelData = new GridData(GridData.GRAB_HORIZONTAL| GridData.GRAB_VERTICAL|GridData.FILL_BOTH);
panel.setLayoutData(gPanelData);
//为Panelä¹è®¾ç½®ä¸ä¸ªå¸å±å¯¹è±¡ãææ¬æ¡åæé®å°æè¿ä¸ªå¸å±å¯¹è±¡æ¥æ¾ç¤ºã
GridLayout gPanelLay = new GridLayout();
panel.setLayout(gPanelLay);
//为Panelçæä¸ä¸ªèæ¯è²
final Color bkColor = new Color(Display.getCurrent(),200,0,200);
panel.setBackground(bkColor);
//çæææ¬æ¡
final Text text = new Text(panel,SWT.MULTI|SWT.WRAP);
//为ææ¬æ¡æå®ä¸ä¸ªå¸å±ç»æ对象ï¼
è¿é让ææ¬æ¡å°½å¯è½çå 满Panelç空é´ã
GridData gTextData = new GridData (GridData.GRAB_HORIZONTAL| GridData.GRAB_VERTICAL|GridData.FILL_BOTH);
text.setLayoutData(gTextData);
//çææé®
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
//为æé®æå®é¼ æ äºä»¶
butt.addMouseListener(new MouseAdapter(){
public void mouseDown(MouseEvent e){
//å½ç¨æ·ç¹å»æé®çæ¶åï¼æ¾ç¤ºä¿¡æ¯
text.setText("Hello SWT");
}
});
//å½ä¸»çªå£å
³éæ¶ï¼ä¼è§¦åDisposeListenerãè¿éç¨æ¥éæ¾Panelçèæ¯è²ã
shell.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e) {
bkColor.dispose();
}
});
}
æè¿æ®µä»£ç ä¸çæ¹æ³initShell()å å
¥å°ç¬¬ä¸ä¸ªæå¼ç©ºçªå£çä¾åä¸ï¼å¾å°çæ¯ä¸æ®µè½æåè¿è¡çå®æ´GUIåºç¨ç¨åºãè¿è¡æ¹æ³å¯åè第ä¸ä¸ªä¾åã
ç³»ç»èµæºç管ç
å¨ä¸ä¸ªå¾å½¢åçæä½ç³»ç»ä¸å¼åç¨åºï¼é½è¦è°ç¨ç³»ç»ä¸çèµæºï¼å¦å¾çãåä½ãé¢è²çãé常è¿äºèµæºé½æ¯æéçï¼ç¨åºåå¡å¿
é常å°å¿ç使ç¨è¿äºèµæºï¼å½ä¸å使ç¨å®ä»¬æ¶ï¼å°±è¯·å°½å¿«éæ¾ï¼ä¸ç¶æä½ç³»ç»è¿æ©ä¼æ²¹å°½ç¯æ¯ï¼ä¸å¾ä¸éæ°å¯å¨ï¼æ´ä¸¥éçä¼å¯¼è´ç³»ç»å´©æºã
SWTæ¯ç¨Javaå¼åçï¼Javaè¯è¨æ¬èº«çä¸å¤§ä¼å¿å°±æ¯JVMç"åå¾åæ¶æºå¶"ï¼ç¨åºåé常ä¸ç¨çä¼åéçéæ¾ï¼å
åçåæ¶çé®é¢ãé£ä¹å¯¹SWTèè¨ï¼ç³»ç»èµæºçæä½æ¯ä¸æ¯ä¹æ¯å¦æ¤ï¼çæ¡æ¯ä¸ä¸ªåæ¶æ¯ï¼ä¸ä¸ªå¥½æ¶æ¯ã
åæ¶æ¯æ¯SWT并没éç¨JVMçåå¾åæ¶æºå¶å»å¤çæä½ç³»ç»çèµæºåæ¶é®é¢ï¼ä¸ä¸ªå
³é®çå ç´ æ¯å 为JVMçåå¾åæ¶æºå¶æ¯ä¸å¯æ§çï¼ä¹å°±æ¯è¯´ç¨åºåä¸è½ç¥éï¼ä¹ä¸å¯è½åå°å¨æä¸æ¶å»è®©JVMåæ¶èµæºï¼è¿å¯¹ç³»ç»èµæºçå¤çæ¯è´å½çï¼è¯æ³ä½ çç¨åºå¸æå¨ä¸ä¸ªå¾ªç¯è¯å¥ä¸å»æ¥çæ°ä¸å¼ å¾çï¼å¸¸è§çå¤çæ¹å¼æ¯æ¯æ¬¡è°å
¥ä¸å¼ ï¼æ¥çï¼ç¶åå°±ç«å³éæ¾è¯¥å¾çèµæºï¼èåå¨å¾ªç¯è°å
¥ä¸ä¸å¼ å¾çï¼è¿å¯¹æä½ç³»ç»èè¨ï¼ä»»ä½æ¶å»ç¨åºå ç¨çä»
ä»
æ¯ä¸å¼ å¾ççèµæºãä½å¦æè¿ä¸ªè¿ç¨å®å
¨äº¤ç»JVMå»å¤çï¼ä¹è®¸ä¼æ¯å¨å¾ªç¯è¯å¥ç»æåï¼JVMæä¼å»éæ¾å¾çèµæºï¼å
¶ç»æå¯è½æ¯ä½ çç¨åºè¿æ²¡æè¿è¡ç»æï¼æä½ç³»ç»å·²ç»å®æã
ä½ä¸é¢ç好æ¶æ¯ä¹è®¸ä¼è®©è¿ä¸ªåæ¶æ¯åå¾æ å
³ç´§è¦ã对äºSWTï¼åªéäºè§£ä¸¤æ¡ç®åç"é»é"æ³åå°±å¯ä»¥æ¾å¿ç使ç¨ç³»ç»èµæºï¼ä¹æ以称为é»éæ³åï¼ä¸æ¯å 为å°ï¼åªæ两æ¡ï¼äºæ¯å 为å®ä»¬åºå¥çç®åã第ä¸æ¡æ¯"è°å ç¨ï¼è°éæ¾"ï¼ç¬¬äºæ¡æ¯"ç¶æ件被éæ¯ï¼åæ件ä¹åæ¶è¢«éæ¯"ã第ä¸æ¡ååæ¯ä¸ä¸ªæ ä»»ä½ä¾å¤çååï¼åªè¦ç¨åºè°ç¨äºç³»ç»èµæºç±»çæé å½æ°ï¼ç¨åºå°±åºè¯¥å
³å¿å¨æä¸æ¶å»è¦éæ¾è¿ä¸ªç³»ç»èµæºãæ¯å¦è°ç¨äº
Font font = new Font (display, "Courier", 10, SWT.NORMAL);
é£ä¹å°±åºè¯¥å¨ä¸å¨éè¦è¿ä¸ªFontçæ¶åè°ç¨
font.dispose();
温馨提示:内容为网友见解,仅供参考