Java drawString 正在绘制超出范围的字符串

标签 java swing jpanel graphics2d drawstring

我有一个 Jpanel,例如宽度为 500,高度为 100。我有计算屏幕垂直中心 (y) 和水平中心 (x) 的公式。我用它来 drawString(myText, x, y) 但它将文本写在 jpanel 的边界之上。这是我正在使用的 paintComponent 代码。

  protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D)g;
        String MenuString = Menu.get(MenuChannel);
        fontMetrics = g2d.getFontMetrics(realFont);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setBackground(Color.PINK);
        g2d.fillRect(0,0,getWidth(),getHeight());
        g2d.setColor(Color.WHITE);
        g2d.setFont(realFont);

        java.awt.geom.Rectangle2D rect = fontMetrics.getStringBounds(MenuString, g2d);
        int textHeight = (int)rect.getHeight();
        int textWidth = (int)rect.getWidth();
        int panelHeight = getHeight();
        int panelWidth = getWidth();
        int x = (panelWidth - textWidth) / 2;
        int y = (panelHeight - textHeight) / 2;
        System.out.println("tH:" + textHeight + "\ntW:" + textWidth + "\npH:" + panelHeight + "\npW:" + panelWidth);
        g2d.drawString(MenuString,x,y);
}

最佳答案

是的 - 这很痛苦 - drawString 将使用 y 作为底线(或基本文本行)来绘制你的 String。如果你想在 Rectangle 中居中 String 你应该使用 FontMetrics

来实现它

关于Java drawString 正在绘制超出范围的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839940/

相关文章:

java - 如何在不使用 HTML 的情况下向 JLabel 添加换行符

java - 如何用Java实现一定的布局

java - 删除并通过 Intent android选择项目

java - 我应该如何以及在何处将 ActionListener 添加到我的代码中?

java - jtable 内的动态 jcombobox 项目

java - panel.setVisible(true) 之后 JPanel 不显示

java - 如何防止 JPanel 调整大小以填充 JScrollPane

java - 无法迭代 Matcher

java - Java 9 的新字符串实现是什么?

java - jEdit StandaloneTextArea 的自定义配色方案?