GEF中組合按鍵設置彙總以及org.eclipse.gef.KeyStroke的方法的使用

原址:GEF中組合按鍵設置彙總以及org.eclipse.gef.KeyStroke的方法的使用

GEF開發中默認的快捷鍵有可能沒有設置齊全,又或者開發中需要自定義設置一些快捷鍵及組合。

我在開發中也遇到此類問題,尤其是對每個鍵該寫什麼參數值很困惑。

在網上有一些零零星星的資料,找來研究了一下,現在將一些內容做個彙總:

GEF中設置快捷鍵主要是在自己的Editor中來處理KeyHandler
首先需要new出一個KeyHander;
然後對keyHander進行處理,主要是put操作,這裏put就是設置相應快捷鍵以及組合鍵的方法;
再其次,將這個keyHander設置進你的Editor的Viewer中去,代碼如:viewer.setKeyHandler(...);
這樣基本上就可以了,以上操作我是放在configureGraphicalViewer()方法中去做的。

主要代碼如下:

protected void configureGraphicalViewer() { 
		
		super.configureGraphicalViewer();		
		... ...	
		
		//--------------設置鍵盤操作--------------------
		keyHandler = new KeyHandler(); 
		keyHandler.put( KeyStroke.getPressed(SWT.DEL, 127, 0), 
				getActionRegistry().getAction(ActionFactory.DELETE.getId())); 
		keyHandler.put( KeyStroke.getPressed('+', SWT.KEYPAD_ADD, 0),
				getActionRegistry().getAction(GEFActionConstants.ZOOM_IN));
		keyHandler.put( KeyStroke.getPressed('-', SWT.KEYPAD_SUBTRACT, 0), 
				getActionRegistry().getAction(GEFActionConstants.ZOOM_OUT)); 
		keyHandler.put(KeyStroke.getPressed(SWT.F2, 0),  
                getActionRegistry().getAction(GEFActionConstants.DIRECT_EDIT));  
		keyHandler.put(KeyStroke.getReleased((char) 1, 97, SWT.CTRL),
				getActionRegistry().getAction(ActionFactory.SELECT_ALL.getId()));
		keyHandler.put(KeyStroke.getReleased((char) 0x03, 99, SWT.CTRL), 
				getActionRegistry().getAction(ActionFactory.COPY.getId()));  //複製 Ctrl+C
		keyHandler.put(KeyStroke.getReleased((char) 0x16, 118, SWT.CTRL), 
				getActionRegistry().getAction(ActionFactory.PASTE.getId())); //黏貼 Ctrl+V
		keyHandler.put(KeyStroke.getReleased((char) 24, (int)'x', SWT.CTRL), 
				getActionRegistry().getAction(ActionFactory.CUT.getId()));  //剪切 Ctrl+X
... ...
		        viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer).setParent(keyHandler));  	
		... ....
		}


這裏最讓我頭疼的是KeyStroke.getReleased()和KeyStroke.getReleased();裏面的參數當時很迷惑,到底寫什麼,老是寫不對。

現在高清楚了,具體解釋如下:
KeyStroke.getPressed()是用於設置一個按鍵的,而KeyStroke.getReleased()是用於設置組合按鍵的;
而裏面的參數,(那KeyStroke.getReleased()來說,如ctrl+a):
第一個參數是你選擇的字母在26個字母中的位置值強制轉換成char型,如a,是第1位,因此第一個參數是:(char)1
第二個參數數字是ASCII碼值,如'a'的ASCII碼值是'97',也可以寫成這樣:(int)'a'
第三個參數一般是鍵盤上的特殊鍵,用SWT可以有直接引用。
這樣理解之後,你設置值的時候就好辦了。

Over.

注意:
經過實驗發現:按鍵那個,組合鍵也可以用KeyStroke.getPressed(),用KeyStroke.getReleased()按鍵的時候反而不怎麼靈敏,有時兩個鍵連着按按快了就不識別,必須ctrl鍵按下去之後再按V或其他鍵,而改成KeyStroke.getPressed()則ok!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章