Java JTextPane 或 JTextArea 在换行前设置每行字符数

Java JTextPane or JTextArea set characters per line before wrapping

我有一个 64 个字符的 "key"(文本),我想使用包含 JTextPanel 或 JTextArea 的 swing JPanel 以有限的 space(宽度)显示它。所有文本都是字母数字,没有 spaces,我使用 monospace 字体来显示它。我想打印 4 行 16 个字符的密钥。我的代码:

JTextArea key = new JTextArea();
key.setColumns(16);
key.setRows(4);
key.setLineWrap(true);
key.setWrapStyleWord(true);
key.setText("475EC49A50F35BA50FE5791B8ECFC12515393A5A200C6BA2C82B290C053A6C85");
JPanel keypanel = new JPanel();
keypanel.add(privatekeybackuptext);

当我 运行 它时,它每行打印超过 16 个字符。它只打印任意大小的盒子所能容纳的数量,textarea/textpane 以 2.5 行十六进制字符结束。我猜 setColumns 和 setRows 与文本的显示方式无关,或者布局管理器正在覆盖某些内容?到目前为止,我已经尝试将面板的 layoutmanager 设置为默认的 FlowLayout,并且我还尝试了带有 fill = GridBagConstraints.BOTH 的 GridBagConstraints。都没有用。我知道我可以通过计算 16 个字符并添加一个换行符来伪造它,但我宁愿正确地做到这一点。最简单的方法是什么?

I am guessing that either setColumns and setRows has nothing to do with how text is displayed

设置列将调整文本区域的大小,使其可以包含 16 "W" 个字符。

When I run it, it prints more than 16 characters per line

您需要使用等宽字体。

textArea.setFont(new Font("monospaced", Font.PLAIN, 12));

现在 "I" 与 "W" 相同,因此每行应有 16 个字符。