首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java8和Java17中,JTextPane对文本的换行方式不同

在Java8和Java17中,JTextPane对文本的换行方式不同
EN

Stack Overflow用户
提问于 2021-08-20 17:24:48
回答 2查看 66关注 0票数 2

在Java8中,如果我将JTextPane的宽度设置为与FontMetrics.stringWidth返回的值相匹配,则文本将精确匹配并绘制在一行上。但是,在Java 17中,使用相同的代码,文本中的最后一个单词是换行的。下面是我的代码:

代码语言:javascript
复制
import java.awt.*;
import javax.swing.*;

public class SimpleTest {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SimpleTest::test);
    }

    private static void test() {
        Test test = new Test();
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(test);
        JFrame frame = new JFrame();
        frame.setContentPane(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(250, 100);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static class Test extends JComponent {

        private static final long serialVersionUID = 1L;
        private JTextPane textPane;

        private Test() {
            textPane = new JTextPane();
            textPane.setFont(new Font("Arial", Font.BOLD, 24));
            textPane.setBorder(null);
            textPane.setContentType("text/plain");
        }

        @Override
        protected void paintComponent(Graphics g) {
            String labelText = "THIS IS A TEST";
            textPane.setText(labelText);
            textPane.setLocation(new Point(0, 0));
            FontMetrics fm = textPane.getFontMetrics(textPane.getFont());
            int width = fm.stringWidth(labelText);
            int height = fm.getHeight();
            textPane.setSize(width, height);
            Graphics2D g2D = (Graphics2D) g.create(0, 0, width, height * 2);
            textPane.paint(g2D);
            g2D.dispose();
        }

    }

}

Java 8:

Java 17:

是否有可能使行为保持一致?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-10 19:32:41

要获得宽度,调用以下命令:

代码语言:javascript
复制
int width = textPane.getPreferredSize().width;

不是这样的:

代码语言:javascript
复制
int width = fm.stringWidth(labelText);
票数 0
EN

Stack Overflow用户

发布于 2021-08-21 01:04:28

我不知道它的细节,但我百分之百确定在Java8中的方法fm.stringWidth(labelText)比在Java11中多1,因为如果我执行fm.stringWidth(labelText)+1,那么换行就可以了。只需更改这一行,您的代码就会正常工作。

如果有帮助,请让我知道。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68865993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档