当前位置: 首页 > 面试题库 >

面板中的居中字符串

逑衡
2023-03-14
问题内容

我正在尝试在面板中居中放置字符串。

目前,我正在这样做:

public void paintComponent(Graphics g) {
        super.paintComponent(g);
            int stringWidth = 0;
            int stringAccent = 0;
            int xCoordinate = 0;
            int yCoordinate = 0;
            // get the FontMetrics for the current font
            FontMetrics fm = g.getFontMetrics();


        /** display new message */
        if (currentMessage.equals(message1)) {
            removeAll();
            /** Centering the text */
            // find the center location to display
            stringWidth = fm.stringWidth(message2);
            stringAccent = fm.getAscent();
            // get the position of the leftmost character in the baseline
            xCoordinate = getWidth() / 2 - stringWidth / 2;
            yCoordinate = getHeight() / 2 + stringAccent / 2;

            // draw String
            g.drawString(message2, xCoordinate, yCoordinate);
            currentMessage = message2;  // alternate message
        }
}

我可以使用一种方法来简化此任务吗?

例如:

public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (currentMessage.equals(message1)) {
                removeAll();
                // draw String centered (with one line of code)
            }
}

似乎我正在做很多工作只是为了使文本居中。


问题答案:

在Java标准库中?不,您可以随时做一些事情

private void drawStringMiddleOfPanel(String string, Graphics g) {
            String message2 = string;
            int stringWidth = 0;
            int stringAccent = 0;
            int xCoordinate = 0;
            int yCoordinate = 0;
            // get the FontMetrics for the current font
            FontMetrics fm = g.getFontMetrics();


        /** display new message */
            /** Centering the text */
            // find the center location to display
            stringWidth = fm.stringWidth(message2);
            stringAccent = fm.getAscent();
            // get the position of the leftmost character in the baseline
            xCoordinate = getWidth() / 2 - stringWidth / 2;
            yCoordinate = getHeight() / 2 + stringAccent / 2;

            // draw String
            g.drawString(message2, xCoordinate, yCoordinate);
            currentMessage = message2;  // alternate message
        }

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (currentMessage.equals(message1)) {
            removeAll();
            drawStringMiddleOfPanel(message1, g);
        }
 }


 类似资料:
  • 我想做一个更大的分辨率/全屏,但我不知道我应该使用什么布局,你们能帮我选择一个更好的布局吗这是第一张图片的第一个代码 这一个,我想把它放在框架的中间,所有的都已经在面板上了,我怎样才能把它移到中间呢?这是第二张图片的代码

  • 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 After Effects 提供了各种创意选项,用于文本的格式化和自定义。使用“字符”面板设置字符格式。如果选择了文本,您在“字符”面板中所做的更改仅影响选定文本。如果没有选择文本,您在“字符”面板中所做的更改将影响所选文本图层和文本图层的选定源文本关键帧(如果存在)。如果

  • 问题内容: 我有以下模板: 我在执行模板时传递了一个字符串。 但是,出现以下错误: 如何比较模板中的字符串? 问题答案: 是函数,而不是运算符。它以以下形式调用:(不是)。 您可以通过将操作数从的侧面移动到之后来修复模板:

  • 问题内容: 我知道这是一个简单的概念,但是我在字体指标方面苦苦挣扎。水平居中不太困难,但垂直居中似乎有点困难。 我试过以各种组合使用FontMetrics的getAscent,getLeading,getXXXX方法,但是无论我尝试过什么,文本总是偏离几个像素。有没有一种方法可以测量文本的确切高度,以使其准确居中。 问题答案: 注意,您 确实 需要仔细考虑垂直居中的含义。 字体呈现在基线上,沿着文

  • 问题内容: 输出: 我希望输出居中。如果我不使用’-‘标志,则输出将向右对齐。 我在API中找不到将文本居中的标志。 该文章有关于格式的一些信息,但没有对中心自圆其说。 问题答案: 我很快就搞定了。您现在可以在中使用。

  • Kotlin有一个很好的特性,叫做字符串模板。我真的很喜欢。 但是否可以在模板中设置任何格式?例如,我想在kotlin中设置字符串模板中的Double格式,至少要在小数分隔符后设置一些位数: