JAVA ToolTip簡單使用

          Posted on 2008-05-11 11:14 stonebow 閱讀(5890) 評論(0)  編輯  收藏 所屬分類: JAVA SWING
           

          TOOLTIP的使用

          JToolTip是指當鼠標停留在一個控件上時顯示的一個包含相關信息的方框,其中可以使用setToolTipText()方法來設置其中的內容,這里可以使用HTML語言來實現(xiàn)更多的效果(換行、表格、圖片等),顯示內容還是很多的。下面是JDK源代碼:

          public void setToolTipText(String text) {

                  String oldText = getToolTipText();

                  putClientProperty(TOOL_TIP_TEXT_KEY, text);

                  ToolTipManager toolTipManager = ToolTipManager.sharedInstance();

                  if (text != null) {

                       if (oldText == null) {

                          toolTipManager.registerComponent(this);

                       }

                  } else {

                      toolTipManager.unregisterComponent(this);

                  }

              }

                   從上面代碼可以看出,這里有一個putClientProperty方法,用來設置TOOL_TIP_TEXT_KEY的屬性值為text(這好像是個哈希表的樣子)。oldText先從getToolTipText()方法中取,如果取到的是空的(null)并且傳進來的text不為空,就注冊給這個組件一個ToolTip

          這個控件是非常有用的,其中String getToolTipText(MouseEvent)是每個JComponent都實現(xiàn)的方法,用來獲取JToolTip控件顯示的內容,此方法默認JDK代碼為:

          public String getToolTipText() {

                  return (String)getClientProperty(TOOL_TIP_TEXT_KEY);

              }

                   就是從TOOL_TIP_TEXT_KEY屬性把值取出來作為返回值。在ToolTipManagershow方法中,就有這樣一句:

          toolTipText = insideComponent.getToolTipText();

          這樣就說明了如果組件重載了getToolTipText()方法,就可以在顯示ToolTip的時候指定內容了。如果要在控件的不同位置顯示不同的ToolTip,要重載public String getToolTipText(MouseEvent event)方法,下面是ToolTipManager類處理鼠標移動的代碼:

          public void mouseMoved(MouseEvent event) {

                  if (tipShowing) {

                      checkForTipChange(event);

                  }

                  else if (showImmediately) {

                      JComponent component = (JComponent)event.getSource();

                      toolTipText = component.getToolTipText(event);

                      if (toolTipText != null) {

                         preferredLocation = component.getToolTipLocation(event);

                          mouseEvent = event;

                          insideComponent = component;

                          exitTimer.stop();

                          showTipWindow();

                      }

                  }

                  else {

                      // Lazily lookup the values from within insideTimerAction

                      insideComponent = (JComponent)event.getSource();

                      mouseEvent = event;

                      toolTipText = null;

                      enterTimer.restart();

                  }

             }

                   加亮顯示的就是使用了重載方法的地方(還有其他一些地方,這里沒全列)。

                   上面的邏輯可能有些混亂,主要是說幾個類之間的關系(JComponentJToolTipToolTipManager三個類),如果要利用SWING顯示ToolTip,可以對上面的類方法進行重載或對類進行繼承來達到自己所需要的效果。例如:

          private class TipPanel extends JPanel

              {

                  public TipPanel()

                  {

                      this.setSize(300, 300);

                      this.setBorder(new javax.swing.border.SoftBevelBorder (javax.swing.border.BevelBorder.RAISED));

                  }

                  public String getToolTipText(MouseEvent event)

                  {

                      return event.getPoint().toString();

                  }

              }

          就重載了JComponentgetToolTipText(MouseEvent)方法,這樣就可以在此JPanel中移動鼠標的時候看到提示框中的變化了。


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 青岛市| 岳普湖县| 清河县| 平度市| 东港市| 黎平县| 济源市| 贞丰县| 乐安县| 应城市| 寿阳县| 万全县| 界首市| 凭祥市| 健康| 高阳县| 贡山| 五大连池市| 通州市| 铜山县| 商都县| 安西县| 六盘水市| 沐川县| 哈尔滨市| 分宜县| 阜宁县| 赤城县| 常德市| 闵行区| 工布江达县| 夹江县| 合肥市| 城固县| 武清区| 天等县| 班戈县| 深泽县| 甘南县| 大洼县| 罗源县|