以下代码段在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:
中很棒
但是如何计算当前行的一般字体/ L& F的正确y
位置?
答案 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;