2012-06-10 57 views
3

我有以下行以獲取一個JList項的提示文字:)如何在Java Swing中獲取工具提示文本字符串寬度?

JList aList=new JList(aData) 
{ 
    public String getToolTipText(MouseEvent evt) // This method is called as the cursor moves within the list. 
    { 
    String tooltipText="Some tooltip"; 
    int tooltipWidth= ? 
    return tooltipText; 
    } 
} 

內getToolTipText(,我怎麼得到的ToolTipText寬度?

+1

* 「我怎麼得到的ToolTipText寬度?」 *你爲什麼需要它? –

+0

我在html中構建了我的工具提示,如下所示:「第一行
========
第二行」,我希望分隔線「=====」匹配第一行的長度,所以它看起來更好,這就是爲什麼我需要第一行的寬度來決定放入分隔線的「=」的數量。 – Frank

+0

看來它需要在第一行下面有一個下劃線,或者需要一個'


'。無論哪種方式,它可以進一步調整使用CSS。您也可以使用CSS來限制寬度,而不是使用強行換行符。 –

回答

1

我形成我的HTML這樣的提示:"<html>first line<Br>========<Br>second line</html>",我想分隔線"====="匹配的長度第一行,因此它可以看起來更好,..

考慮替代方案2 & 3,兩者不需要計算,比更好看「行的等號」。

HTML ToolTip

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.LineBorder; 

public class HtmlToolTip { 

    HtmlToolTip() { 
     String attempt1 = "<html>first line 1<Br>========<Br>second line</html>"; 
     JLabel label1 = new JLabel(attempt1); 
     label1.setBorder(new LineBorder(Color.BLACK)); 

     String attempt2 = "<html><u>first line 2</u><br>second line</html>"; 
     JLabel label2 = new JLabel(attempt2); 
     label2.setBorder(new LineBorder(Color.BLACK)); 

     String attempt3 = "<html>first line 3<hr>second line</html>"; 
     JLabel label3 = new JLabel(attempt3); 
     label3.setBorder(new LineBorder(Color.BLACK)); 

     JPanel p = new JPanel(new FlowLayout(FlowLayout.LEADING,5,5)); 
     p.add(label1); 
     p.add(label2); 
     p.add(label3); 

     JOptionPane.showMessageDialog(null, p); 
    } 

    public static void main(String[] args) throws Exception { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new HtmlToolTip(); 
      } 
     }); 
    } 
} 
+0

非常好!我終於選擇了


,有時候有人會問:「你爲什麼要這樣做?」謝謝 ! – Frank

+0

*「選擇了'


'」這也是一個很好的選擇。我更喜歡下劃線。 :) –

2

您可以使用FontMetrics來確定一些文本的大小。

FontMetrics metrics = graphics.getFontMetrics(font); 
int adv = metrics.stringWidth(text); 

http://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html

要找到使用的字體,你可以查詢LookAndFeel您使用

UIDefaults uidefs = UIManager.getLookAndFeelDefaults(); 
Font font = uidefs.getFont("ToolTip.font"); 
System.out.println(font); 
// prints: FontUIResource[family=Dialog,name=Dialog,style=plain,size=12] 

要知道你可以使用( 「ToolTip.font」 在這裏),你可以在鑰匙檢查Swing中默認LookAndFeels的文檔,例如Nimbus:

http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primary

+0

感謝您的信息。但在我的情況下,如何獲得getToolTipText()方法內的「圖形」實例,這就是我遇到麻煩的地方! – Frank

+0

在'JComponent'裏面有'getGraphics()'方法。我認爲你創建'Graphics'的方法更加靈活(它可以在沒有圖形對象的情況下工作),但是使用組件的圖形應該更有效一些,因爲它不需要創建一個新的圖像一個圖形對象 – Joost

0

多虧了答案,我想通了,這裏是我做過什麼:

UIDefaults uidefs=UIManager.getLookAndFeelDefaults(); 
Font font=uidefs.getFont("ToolTip.font"); 
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); 
Graphics2D g2d=ge.createGraphics(new BufferedImage(1,1,1)); 
FontMetrics fontMetrics=g2d.getFontMetrics(); 
Top_Line_Width=fontMetrics.stringWidth("Toptip text"); 
相關問題