我在JTextPane中绘制了一个textlayout。但是我无法为y轴获得textlayout的正确位置。
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import javax.swing.JTextPane;
public class CustomTextPane extends JTextPane {
private final Font myFont = new Font(Font.SANS_SERIF, Font.PLAIN, 16);
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//Drawing hint text
Graphics2D g2 = (Graphics2D) g.create();
FontRenderContext frc = g2.getFontRenderContext();
TextLayout jTextLayout = new TextLayout("My Text", myFont, frc);
g2.setPaint(Color.BLACK);
int nBaseLine = getBaseline(getWidth(), getHeight());
jTextLayout.draw(g2, 10, nBaseLine);
g2.dispose();
}
}
getBaseline方法为JTextPane返回-1。
但是当我以这种方式使用JTextField时,getBaseLine方法会获得正确的值。
为什么基线方法返回-1?如何获得正确的基线值以在正确的位置绘制textlayout?
答案 0 :(得分:0)
正如camickr已经评论过的那样,单行文本的基线比可以包含多行文本(JTextPane
)的矩形更有意义。
当您为getBaseline
调用JTextField
方法时,会调用JComponent.getBaseline
方法,从而调用BasicTextFieldUI.getBaseline
方法。在最后一种方法中,实际计算了基线。
当您为getBaseline
调用JTextPane
方法时,它会调用JComponent.getBaseline
方法,最终会调用ComponentUI.getBaseline
方法。这里检查三个参数。如果其中一个参数不正确,则抛出异常;否则,返回值-1。