【问题标题】:Java JTextPane or JTextArea set characters per line before wrappingJava JTextPane 或 JTextArea 在换行前设置每行字符
【发布时间】:2018-04-09 19:19:28
【问题描述】:

我有一个 64 个字符的“键”(文本),我想使用一个包含 JTextPanel 或 JTextArea 的摇摆 JPanel 在有限的空间(宽度)中显示它。所有文本都是字母数字,没有空格,我使用等宽字体来显示它。我想打印 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 与文本的显示方式或布局管理器是否覆盖某些内容无关?到目前为止,我已经尝试将面板的布局管理器设置为默认的 FlowLayout,并且我还尝试了使用 fill = GridBagConstraints.BOTH 的 GridBagConstraints。都没有奏效。我知道我可以通过数出 16 个字符并添加换行符来伪造它,但我宁愿正确地做到这一点。最简单的方法是什么?

【问题讨论】:

  • 这会很困难,因为您无法保证 JTextArea 将使用的字体,因此您无法保证一行可以容纳多少个字符。为什么不将字符串分成长度为 16 的四行?

标签: java character limit jtextarea jtextpane


【解决方案1】:

我猜测 setColumns 和 setRows 都与文本的显示方式无关

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

当我运行它时,它每行打印超过 16 个字符

您需要使用等宽字体。

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

现在“I”与“W”相同,所以每行应该有 16 个字符。

【讨论】:

  • 这解决了问题,完全使用了您的文本行。具有讽刺意味的是,我曾尝试通过注册 ttf 文件并将字体设置为该字体来添加等宽字体(Inconsolata)(我知道它有效,因为它显示了字体),但无论出于何种原因,该字体并没有像你的行那样做,这正是我想要的。
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
相关资源
最近更新 更多