Swing


          天行健 君子以自強不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Swing DayDayUp之六: QQ風格JTextField

          Posted on 2010-02-09 12:06 zht 閱讀(3766) 評論(3)  編輯  收藏 所屬分類: Swing

          對比圖:

          效果圖:




          昨天是相當的郁悶,寫程序發泄下,搞了一個qq風格的JTextField,如上圖所示
          關鍵知識點
          1:
          圓角效果
              (1)通過setClip設置剪切區域,只繪制圓角區域
                      RoundRectangle2D.Double rect = new RoundRectangle2D.Double(0, 0, this.getWidth(), this.getHeight(), 20, 20);
                      g.setClip(rect);
                      注意要在super之前設置
              (2)重載paintBorder方法繪制圓角邊框
                      RoundRectangle2D.Double rect = new RoundRectangle2D.Double(1, 1, this.getWidth() - 2, this.getHeight() - 2, 20, 20);
                        g2d.setColor(new Color(0, 100, 100));
                        g2d.draw(rect);
          2:
          查詢圖標
              (1)重載getInsets方法設置間隙
              (2)重載paintComponent繪制圖片和三角箭頭
          3:
          鼠標及事件觸發
              (1)光標:添加addMouseMotionListener事件,在mouseMove中設置光標
                  if (getIconBounds().contains(e.getPoint())) {
                       SearchTextField.this.setCursor(Cursor.getDefaultCursor());
                  } else {
                       SearchTextField.this.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
                  }
              (2)鼠標點擊search圖標事件:添加addMouseListener事件,在mouseClick中彈出菜單或做其它處理
                  if (getIconBounds().contains(e.getPoint())) {
                          JPopupMenu menu = new ZHTPopupMenu("menu");
                          for (int i = 1; i < 6; i++) {
                          JCheckBoxMenuItem item = new JCheckBoxMenuItem("item" + i);
                          menu.add(item);
                      }
                      menu.show(SearchTextField.this, getWidth() - 5, getHeight() - 2);
                  }

          by
                   zhangtao

                   zht_dream@hotmail.com
          主站蜘蛛池模板: 舞钢市| 清徐县| 古交市| 日土县| 迁西县| 泽库县| 海阳市| 黑河市| 桑日县| 巴林左旗| 沧源| 辽中县| 湘潭县| 芦山县| 昌宁县| 吉隆县| 得荣县| 卫辉市| 通山县| 卢氏县| 县级市| 买车| 北京市| 陕西省| 徐闻县| 武冈市| 安国市| 和硕县| 新龙县| 定兴县| 华容县| 宝鸡市| 富阳市| 兴海县| 高陵县| 高阳县| 公主岭市| 乃东县| 尚义县| 双城市| 邵武市|