JAVA ToolTip簡單使用

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

          TOOLTIP的使用

          JToolTip是指當(dāng)鼠標(biāo)停留在一個控件上時顯示的一個包含相關(guān)信息的方框,其中可以使用setToolTipText()方法來設(shè)置其中的內(nèi)容,這里可以使用HTML語言來實(shí)現(xiàn)更多的效果(換行、表格、圖片等),顯示內(nèi)容還是很多的。下面是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方法,用來設(shè)置TOOL_TIP_TEXT_KEY的屬性值為text(這好像是個哈希表的樣子)。oldText先從getToolTipText()方法中取,如果取到的是空的(null)并且傳進(jìn)來的text不為空,就注冊給這個組件一個ToolTip。

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

          public String getToolTipText() {

                  return (String)getClientProperty(TOOL_TIP_TEXT_KEY);

              }

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

          toolTipText = insideComponent.getToolTipText();

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

          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();

                  }

             }

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

                   上面的邏輯可能有些混亂,主要是說幾個類之間的關(guān)系(JComponent、JToolTipToolTipManager三個類),如果要利用SWING顯示ToolTip,可以對上面的類方法進(jìn)行重載或?qū)︻愡M(jìn)行繼承來達(dá)到自己所需要的效果。例如:

          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中移動鼠標(biāo)的時候看到提示框中的變化了。


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 常宁市| 霍州市| 翁牛特旗| 买车| 应城市| 胶南市| 青龙| 富阳市| 分宜县| 莒南县| 加查县| 久治县| 五华县| 资阳市| 团风县| 会泽县| 垫江县| 万载县| 穆棱市| 玛沁县| 什邡市| 浙江省| 镇平县| 洪湖市| 灵石县| 怀化市| 嘉荫县| 屯留县| 万山特区| 崇仁县| 宁南县| 东丽区| 乐陵市| 昭觉县| 馆陶县| 高碑店市| 尉氏县| 平江县| 当阳市| 南城县| 柘城县|