亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

搭建Java桌面應用程序原型(三)

2019-11-18 14:50:12
字體:
來源:轉載
供稿:網友
做技術決定

  在開發過程中,我不得不去解決一些技術問題并且要做一些技術決定。下面的代碼片段僅僅簡單的進行了解釋,但是他們將在我以后的文章中被具體描述。在這里重要的是去理解原型充當的角色。用你的原型去尋找技術問題的解決方案,去測試不常用的APIs,并且保證你的應用程序的性能。

  用多層Panels

  構建一個例如windows中的畫板的圖形應用程序不是非常復雜的任務。你必須處理鼠標事件、畫線、畫矩形和畫橢圓。還要處理變形功能,比如從一個基礎應用程序到一個專業級的圖形編輯器要具有對圖片的移動,縮放,重新排序、刪除、復制、剪切和粘貼等更多的工作。你也可以想要包含一個可以進行編輯、重新控制大小和文字包裝功能的文字框等等。構建自己的風格文本編輯器是沒有必要的,因為Swing已經提供了一些文本組件。

  你怎么將Swing的文本編輯器和你自己的繪圖組件相集成?我考慮了兩個解決方案。一個是實現一個類似于JTable所用的cell編輯器,但是假如你想改變文本框大小或者移動它就需要一點技巧了。另個一個解決方案是用JDesktopPane,把文本組件放在JInternalFrame之內。

  用第二種解決方案的話,Swing已經提供了改變大小和移動功能,但是下面的問題是你怎么在包含文本注釋的內置frame下繪制圖象?并且你怎么在JDesktopPane上繪制其他簡單圖形,例如直線、矩形和橢圓?幸運的是,有一個簡單的解決方案,因為JDesktopPane是真正的多層Panel。原型的MainPane類擴展了JDesktopPane,有兩層。它們中的一個包含PaintView自定義組件,答應你繪制簡單圖形。另一層包含文本注釋。當然,假如一個注釋圖片不能被程序獲得,那么這個解決辦法是沒有意義的。MainPanel的getAnnotatedImage()方法利用下面的代碼做這件事:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
PRintAll(g);
g.dispose(); 在paint()外部進行繪制

  Swing組件的繪制通常都是在paint()內部進行或者在paint()內部調用繪制方法。當用鼠標在屏幕上繪制一個對象,可是,你不想重繪其他組件,因為這將引起應用程序運行效率低下。例如,用戶用鉛筆進行繪制,每個鼠標事件都讓應用繪制一個小線段。在MOUSE_PRESSED和MOUSE_RELEASED之間有上百個MOUSE_DRAGGED事件。

  當用戶在屏幕僅僅繪制了一些圖形時,重繪PaintView組件幾百次這樣的事情是不能被接受的。注重一下,PaintView處理大多數的繪制操作并且一個repaint需要所有注釋包括文本注釋進行重繪。正確的解決方案是當每個鼠標事件被處理時在paint()外部利用getGraphics()獲得圖形上下文。

protected void toolAction(MouseEvent e) {
 e.consume();
 Graphics2D g2 = (Graphics2D) getGraphics();
 float zoomFactor = model.getZoomFactor();
 g2.scale(zoomFactor, zoomFactor);
 float x = e.getX() / zoomFactor;
 float y = e.getY() / zoomFactor;
 currentTool.action(e.getID(), x, y, g2);
 g2.dispose();
}
  PaintView組件利用鼠標監聽去處理鼠標事件。上面的方法被每一個事件所調用,委托繪制currentTool對象。當鼠標釋放的時候,repaint()被調用去請求整個組件的刷新。因此,用戶完成圖形對象繪制后paint()僅僅被調用一次。這是注冊鼠標監聽的代碼:

protected void registerListeners() {
 addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) {
   if (SwingUtilities.isLeftMouseButton(e)) {
    requestFocus();
    currentTool = model.createTool(AbstractTool.DRAW_STYLE);
    toolAction(e);
   }
  }

  public void mouseReleased(MouseEvent e) {
   if (SwingUtilities.isLeftMouseButton(e)) {
    toolAction(e);
    model.setLastTool(currentTool);
    currentTool = null;
    repaint();
   }
 }
});

addMouseMotionListener(new MouseMotionAdapter() {
 public void mouseDragged(MouseEvent e) {
  if (SwingUtilities.isLeftMouseButton(e))
   toolAction(e);
 }
});

...
}
  PaintView類的完整代碼將在以后的文章中講述。上面代碼片段僅僅展示了怎么利用原型去做技術決定。

  總結

  原型在應用程序開發過程中有著重要的角色,答應你測試你的想法并且盡早的獲得用戶反饋。我沒有把原型看成是當“真正”開發開始時可以被丟棄的代碼片段。反而,原型應該是你產品或者著應用的基礎。這意味著你應該小心的對它進行編碼,盡管你的類或方法在以后要被重寫。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情自拍图| 色婷婷av一区二区三区在线观看| 国产成人精品在线观看| 亚洲福利在线看| 日韩在线免费高清视频| 91亚洲精品一区二区| 国产精品亚洲第一区| 欧美黑人性猛交| 69视频在线播放| 国产国语videosex另类| 91精品国产成人www| 亚洲精品久久久久久久久| 亚洲视频国产视频| 中文字幕亚洲综合久久| 亚洲精品福利免费在线观看| 亚洲自拍偷拍区| 欧美亚洲免费电影| 亚洲免费一在线| 欧美性视频在线| 另类色图亚洲色图| 欧美大片va欧美在线播放| 久久精品一偷一偷国产| 欧美日韩国产成人在线| 97涩涩爰在线观看亚洲| 久久久久久久国产精品视频| 欧美亚州一区二区三区| 欧美一级淫片播放口| 久久视频免费在线播放| 国产精品久久久久秋霞鲁丝| 亚洲综合日韩在线| 国产一区二区三区三区在线观看| 欧美一区二区视频97| 91在线视频免费| 欧美精品videos性欧美| 亚洲另类xxxx| 91av免费观看91av精品在线| 国产精品香蕉在线观看| 欧美一级在线亚洲天堂| 成人性生交大片免费看视频直播| 亚洲精品国产精品乱码不99按摩| 亚洲欧美日本精品| 日韩成人在线视频观看| 亚洲精品动漫久久久久| 精品国产视频在线| 国产精品国产自产拍高清av水多| 国产精品久久久久久久久男| 久久亚洲综合国产精品99麻豆精品福利| 国产精品 欧美在线| 国产亚洲一区二区精品| 日本久久久久久久久| 69国产精品成人在线播放| 国产精品影片在线观看| 国产精品三级久久久久久电影| 国产成人久久久| 成人av在线亚洲| 91av在线网站| 国产精品av在线| 色偷偷av亚洲男人的天堂| 亚洲女人被黑人巨大进入al| 亚洲精品久久7777777| 欧美精品一区二区三区国产精品| 98精品国产高清在线xxxx天堂| 久久久久久久电影一区| 在线丨暗呦小u女国产精品| 欧美性猛交xxxx免费看漫画| 日韩一级黄色av| 欧美视频不卡中文| 国产一区二区三区在线观看网站| 欧美精品videossex性护士| 国产精品av在线| 久久久极品av| 最新的欧美黄色| 亚洲精品国产拍免费91在线| 国模精品视频一区二区三区| 国产精品视频一| 在线电影欧美日韩一区二区私密| 在线播放国产一区中文字幕剧情欧美| 国产成人中文字幕| 91大神在线播放精品| 欧美另类69精品久久久久9999| 久久久亚洲影院你懂的| 久久久久久国产精品久久| 久久久久久高潮国产精品视| 一区二区福利视频| 欧美成人激情图片网| 欧美在线中文字幕| 日本不卡视频在线播放| 亚洲一区久久久| 国产视频精品一区二区三区| 亚洲福利视频二区| 日韩精品视频在线观看网址| 麻豆一区二区在线观看| 欧美福利视频网站| 97人人爽人人喊人人模波多| 日韩一区二区在线视频| 亚洲国产精彩中文乱码av| 51色欧美片视频在线观看| 欧美成人免费网| 91九色蝌蚪国产| 国产精品视频资源| 日av在线播放中文不卡| 国产999精品久久久| 在线成人激情视频| 精品久久久久久亚洲国产300| 亚洲国产日韩欧美在线动漫| 国内精品视频在线| 欧美福利小视频| 国产亚洲激情在线| 免费成人高清视频| 久久精品99国产精品酒店日本| 欧美老女人性视频| 国产精品福利无圣光在线一区| 欧美做受高潮1| 欧美自拍大量在线观看| 91社区国产高清| 欧美另类极品videosbestfree| 国产精品91在线| 国产成人精品亚洲精品| 久久99热精品| 欧美日韩国产在线看| 欧美高清视频在线| 欧美综合一区第一页| 欧美午夜片欧美片在线观看| 丰满岳妇乱一区二区三区| 岛国av一区二区三区| 91av在线播放| 亚洲第一视频网| 亚洲男人天堂古典| 久久久精品在线观看| 欧美精品videosex牲欧美| 国产欧美精品一区二区三区-老狼| 国产精品一区专区欧美日韩| 国产日韩欧美日韩| 正在播放国产一区| 91久久在线播放| 久久在线视频在线| 欧美日韩国产在线看| 久久久女人电视剧免费播放下载| 国产精品久久电影观看| 伊人久久大香线蕉av一区二区| 成人黄色av免费在线观看| 欧美激情欧美激情在线五月| 精品中文字幕在线观看| 伊人久久久久久久久久久| 国产精品18久久久久久首页狼| 色综合伊人色综合网站| 九九热最新视频//这里只有精品| 欧美日韩亚洲精品内裤| 高清欧美电影在线| 国产日韩欧美91| 欧美成人在线网站| 欧美老女人xx| 欧美裸体xxxx极品少妇| 精品国产一区久久久| 在线视频免费一区二区| 韩日欧美一区二区| 久久久久一本一区二区青青蜜月| 久久久欧美一区二区| 日本欧美精品在线| 国产精品久久久久久影视| 国产精品第一页在线| 日韩中文字幕免费看| 精品亚洲精品福利线在观看| 激情成人中文字幕|