zeyuphoenix

          愿我愛的人快樂,愿愛我的人快樂,為了這些,我愿意不快樂.

          表格(懸浮框提示)

          JTableToolTip提示和其它的組件提示是一樣的,因為它們都是繼承于Jcomponent,當我們需要為我們的單元格實現ToolTip的時候,只需要復寫它的getToolTipText方法就可以了,

          看看Sun官方的例子:

                 //Implement table cell tool tips.

                  @Override

                   public String getToolTipText(MouseEvent e) {

          取得鼠標的行和列:

                     java.awt.Point p = e.getPoint();

                     int rowIndex = rowAtPoint(p);

                     int colIndex = columnAtPoint(p);

                     int ealColumnIndex = convertColumnIndexToModel(colIndex);

          設置你需要顯示的ToolTip,然后返回

                  tip = ……;

                    returntip;

          同樣的JTableHeader也是如此:

                 protected JTableHeader createDefaultTableHeader() {

                          returnnew JTableHeader(columnModel) {

                           @Override

                              public String getToolTipText(MouseEvent e) {

          這樣不用其它設置,JTable的基本ToolTip就實現了,它雖然比較簡單,但是最大的好處是不用自己考慮定位和顯示的問題,很多時候也就可以了.

          關于JTable的簡單ToolTip提示就算是完成了,當我們只是簡單的提示的時候,只需要復寫JTablegetToolTipTextsetToolTipText方法就可以了,上個例子就是這樣;但是當我們需要使我們的ToolTip提示不像Sun提供的那么單調,我們就需要自己來實現了.

          這時候的重點已經不在JTable上了,而在于ToolTip上面,我們可以把我們需要呈現的ToolTip實現為一個JPanel,這樣就可以在它的上面放置各種組件了,設置放圖標都可以,這個時候就需要實現這個ToolTipUIManager,這方面有很多開源的實現,以后有時間的話開個專題專門來介紹ToolTip,這里不寫了.

          對于已經實現好的我們自己的ToolTip,我們需要做的是把它注冊到我們的JTable上面,再根據鼠標的位置顯示它,如下圖所示,它可以有Title,可以有圖片,可以有正文,甚至可以再加別的組件.如下圖所示:

          我們需要的是增加監聽:

          addMouseListener(this)

          根據監聽的狀態處理ToolTip

              @Override

              publicvoid mouseExited(MouseEvent event) {

          隱藏

              @Override

              publicvoid mousePressed(MouseEvent event) {

          顯示

              @Override

              publicvoid mouseMoved(MouseEvent event) {

          判斷狀態,顯示或者隱藏.

          然后是判斷位置:

              // display directly below or above JTable band

              location.x = screenLocation.x;

              location.y = screenLocation.y + mouseEvent.getY() + 22;

              location.x = screenLocation.x +mouseEvent.getX();

              f ((location.y + size.height) > (sBounds.y + sBounds.height)) {

                        location.y = screenLocation.y - size.height;

          最后是取得鼠標所在單元格的值傳入顯示:

              Point p = mouseEvent.getPoint();

                     int row = rowAtPoint(p);

                     int col = columnAtPoint(p);

                     if (row == -1 || col == -1) {

                        returnnull;

                     }

                     Object data = getValueAt(row, col);

          當然此時你可以對data做變換,從而顯示需要的值.

          使用很簡單,注冊就可以了.

          setActionRichTooltip(new RichTooltip());

          然后是另外一種ToolTip的效果,這個是一個開源的實現,只抓張圖看看就算了,和前面的實現基本類似,還比那個簡單,也是UI,Timer以及位置計算.如下圖,代碼在open就有:

          ToolTip到這兒就算完了,但是實際使用中可能有這個問題,如下圖:

          這是因為我們經過設置Renderer渲染的單元格顯示值和實際值不一樣了.但我們很多時候需要看到的其實不是它的真實值,而是渲染后的值,可以通過渲染的實現類把它取回來:

          先取得渲染類:

           TableCellRenderer cellRenderer = table.getColumnModel().getColumn(column).getCellRenderer();

          再去的渲染的控件:

           Component component = cellRenderer.getTableCellRendererComponent(table,

                 table.getValueAt(row, column), false, false, row, column);

          這個時候不知道這個控件是否有getText方法,通過反射判斷,沒有則設置為””

              String text = "";

                  if (component != null) {

                      for (Method method : component.getClass().getMethods()) {

                          if (method.getName().equals("getText")) {

                              text = method.invoke(component).toString();

                          }

                      }

                  }

          最后效果如圖:

          到此為止,所有關于JTableToolTip提示就完成了,當然我實現的都是一些基本的效果,比較復雜的效果,則需要你自己去繪制和實現ToolTip,說句簡單的,技術完成了,以后就是玩色彩和審美了,做程序也就這樣了,很多時候后者重要.

          posted on 2010-04-14 23:29 zeyuphoenix 閱讀(5285) 評論(0)  編輯  收藏 所屬分類: JTable的使用

          導航

          <2010年4月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          統計

          常用鏈接

          留言簿(52)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长武县| 肇庆市| 麻江县| 沭阳县| 永安市| 乐亭县| 阿克苏市| 新河县| 江油市| 明溪县| 贵港市| 唐海县| 枞阳县| 惠州市| 米易县| 建水县| 麻栗坡县| 贵州省| 辉县市| 白朗县| 金沙县| 基隆市| 桐梓县| 井冈山市| 石家庄市| 玉溪市| 东乡县| 时尚| 衡东县| 萝北县| 西盟| 广州市| 武乡县| 舞阳县| 锦州市| 六盘水市| 溧水县| 吉首市| 江城| 肇东市| 津市市|