JAVA ToolTip簡單使用

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

          TOOLTIP的使用

          JToolTip是指當鼠標停留在一個控件上時顯示的一個包含相關信息的方框,其中可以使用setToolTipText()方法來設置其中的內容,這里可以使用HTML語言來實現更多的效果(換行、表格、圖片等),顯示內容還是很多的。下面是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都實現的方法,用來獲取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中移動鼠標的時候看到提示框中的變化了。


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


          網站導航:
           
          主站蜘蛛池模板: 遂平县| 苍山县| 茂名市| 五台县| 房产| 新余市| 新和县| 蚌埠市| 都江堰市| 星子县| 剑河县| 灵台县| 泰顺县| 乌拉特中旗| 历史| 五台县| 临城县| 红桥区| 保德县| 留坝县| 桂阳县| 新绛县| 应用必备| 桑日县| 恩平市| 建湖县| 梁河县| 宜丰县| 通化市| 托里县| 广丰县| 贡嘎县| 柳河县| 长葛市| 仲巴县| 岳普湖县| 乌拉特后旗| 巴中市| 津市市| 波密县| 丹巴县|