打造專業外觀-二
在上一篇《打造專業外觀-九宮圖》,介紹了九宮格的概念並留下了一個演示程式。那個程式只是一個渲染過的視窗,許多必要的功能尚未實現,比如拖拽移動、改變大小、標題欄雙擊等。好現在就來一一實現。
你首先從這裡下載上一篇程式的程式碼,然後在eclipse中開啟。
一、拖拽移動與雙擊標題欄。
為DemoShell類新增下列成員
private Point location;
注意:匯入的時候仔細看import語句。import org.eclipse.swt.graphics.Point;而不是import java.awt.Point;
窗體的拖拽操作一般是拖拽窗體的標題欄,所以實現的思路就確定在northPanel了。方法就是為northPanel(充當標題欄)新增滑鼠事件監聽器。
northPanel.addMouseListener(this);
northPanel.addMouseMoveListener(this);
然後使DemoShell實現ControlListener、MouseListener、MouseMoveListener介面,並生成介面方法。
在mouseDoubleClick方法中新增如下程式碼:
if (e.getSource() == northPanel) {
setMaximized(!getMaximized());
}
首先判斷如果雙擊是northPanel發起的,那麼立即改變狀態,只需一句話即可。
在mouseDown新增如下程式碼:
if (e.getSource() == northPanel) {
if (!getMaximized()) {
location = new Point(e.x, e.y);
}
}
同理,要判斷是否是northPanel發出的雙擊事件。然後在視窗不是最大化時再為location賦值,注意,是在視窗不是最大化時,否則location就應該為null。之所以這麼做是當窗體呈最大化狀態時不應該移動,道理不難理解。
然後在mouseUp方法中新增如下程式碼:
if (e.getSource() == northPanel) {
location = null;
}
當滑鼠抬起時,釋放location。
接下來是最重要的mouseMove方法。該方法如下:
public void mouseMove(MouseEvent e) {
if (e.getSource() == northPanel) {
if (location != null) {
Point p = getDisplay().map(this, null, e.x, e.y);
setLocation(p.x - location.x, p.y - location.y);
}
}
}
注意:有對location不空的判斷。map(Control from, Control to, int x, int y)函式是座標轉換,把from元件上的(x,y)座標轉換成to元件的座標。null表示to元件就是桌面。如果你仔細研讀《SWT自定義元件之Slider》就會比較容易理解。
現在你可以執行程式,發現視窗可以拖拽了。
二、改變大小
新增如下變數聲名
private Point size;
然後在mouseDown方法中追加如下語句
else if (e.getSource() == southeastPanel) {
size = new Point(e.x, e.y);
}
在mouseUp中追加如下語句
else if (e.getSource() == southeastPanel) {
if (size == null) {
return;
}
setSize(new Point(getBounds().width + e.x - size.x,
getBounds().height + e.y - size.y));
size = null;
}
其原理同上。
這個時候可以改變尺寸了,再新增如下功能畫龍點睛。
private Cursor seCursor = new Cursor(getDisplay(), SWT.CURSOR_SIZESE);
private Cursor titleCursor = new Cursor(getDisplay(), SWT.CURSOR_SIZEALL);
southeastPanel.setCursor(seCursor);
northPanel.setCursor(titleCursor);
好。現在執行程式觀察下結果,但是美中不足的是,當拖拽右下角改變尺寸時,沒有一個虛線來指示,能不能像前面《SWT自定義元件之Slider》虛擬劃塊那樣實現呢,答案是不能,究其原因是Java支援的繪圖操作還只能以元件為畫布,不能實現在桌面上繪圖,有待SWT、AWT(swing不行)在底層提供了這一功能。由於時間關係,只能先介紹移動、改變大小的實現。最小化、最大化、關閉等功能按鈕,圓角,標題欄文字等的實現,以後再做介紹。不過您可以嘗試標題欄文字著一功能,很簡單,為northPanel新增addPaintListener即可。
改進後的程式碼這裡下載
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13685345/viewspace-237833/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 外觀模式及其改進(二):抽象外觀類的引入模式抽象
- 外觀模式模式
- 外觀模式及其改進(一):外觀模式概述模式
- 如何打造六西格瑪專業人才?
- JS 外觀模式JS模式
- 騰訊獲“遊戲機”外觀專利,可能推出Windows掌機遊戲Windows
- iOS設計模式之二:外觀模式和裝飾器模式iOS設計模式
- 【設計模式】外觀設計模式
- CSS外觀屬性CSS
- 達觀文件智慧方案助力打造審計業智慧函證中心
- 企業郵箱選擇指南 打造專業形象必備
- 外觀模式(Facade)模式
- css文字外觀屬性CSS
- python-外觀模式Python模式
- 設計模式-外觀模式設計模式
- JavaFacadePattern(外觀模式)Java模式
- 結構性外觀模式.模式
- 免費OA系統,打造企業辦公管理專業化
- 打造企業專屬的照片影集解決方案
- 使用Nagios打造專業的業務狀態監控iOS
- 結構型模式:外觀模式模式
- 設計模式(十)外觀模式設計模式
- java設計模式-外觀模式Java設計模式
- 設計模式系列-外觀模式設計模式
- 設計模式(十):外觀模式設計模式
- 螢幕提升驚人!小米公佈智慧手環新外觀專利?
- 專業二維碼製作工具
- 如何在3D空間打造2D藝術,《Season》插畫外觀創作分享3D
- ColorFinale Pro for mac(FCPX外掛:專業分級調色外掛)Mac
- Palm打造手機專用Linux作業系統(轉)Linux作業系統
- iPhone 6S被判侵犯中國公司外觀專利 蘋果無視侵權iPhone蘋果
- 二、外掛
- 寶鯤財經外匯專業投研機構分析師專業嗎
- Python設計模式-外觀模式Python設計模式
- 極簡設計模式-外觀模式設計模式
- 設計模式---外觀設計模式設計模式
- JS 設計模式 十一(外觀模式)JS設計模式
- Java設計模式11:外觀模式Java設計模式