JTextArea - 与现有文本一致的drawString

时间:2014-12-14 13:36:22

标签: java swing drawstring

以下代码段在JTextArea

中绘制了建议的自动完成字符串
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (suggestion != null && isSuggesting()) {
        final String selectedSuggestion = 
                suggestion.list.getSelectedValue().getValue().substring(
                        suggestion.subWord.length());
        g.setColor(Color.GRAY);
        final int position = getCaretPosition();
        Point location;
        try {
            location = modelToView(position).getLocation();
        } catch (BadLocationException e2) {
            e2.printStackTrace();
            return;
        }
        //TODO: 13 ???
        g.drawString(
                selectedSuggestion, 
                location.x, 
                13 + location.y);
    }
}

我使用的是幻数13,这在我的L& F:

中很棒

enter image description here

但是如何计算当前行的一般字体/ L& F的正确y位置?

2 个答案:

答案 0 :(得分:2)

您可以使用当前字体大小来计算正确的位置。

只需将当前字体大小添加到location.y,如下所示:

  

g.drawString(selectedSuggestion,location.x, g.getFont()。getSize() + location.y);

修改:使用 FontMetrics

    FontMetrics fm = getFontMetrics(g.getFont());
    int heightToAdd=(int)fm.getStringBounds("Sample Text", g).getHeight();
    g.drawString("Sample text", location.x, location.y+heightToAdd);

这只是一些随机文本的尝试。

请参阅此处的java文档:Using FontMetrics

答案 1 :(得分:2)

也许我错过了什么,但你已经掌握了所需的信息:

Rectangle r = textArea.modelToView( textArea.getCaretPosition() );
int yOffset = r.y + r.height;