如何使用JavaSwing在两列中打印文本?

如何使用JavaSwing在两列中打印文本?,java,swing,printing,java-2d,Java,Swing,Printing,Java 2d,我有一个较长的文本保存在字符串中。我想在一页上打印两列文字。如何使用JavaSwing实现这一点 我不明白当该换行的时候,我怎么能把文本包装起来。我已经阅读了Java教程,但除了FontMetrics之外,我还没有找到任何有用的文本或字符串处理方法 Java API中有没有什么好的方法,或者我可以使用什么好的库来实现这一点?有趣的问题是,可能有一些复杂的方法使用文档接口;但基本上创建两个并排的JTextPanes()。你可以花很多时间尝试自动测量文本,所以它分成两部分,但我只想在中间找到一个段落

我有一个较长的文本保存在字符串中。我想在一页上打印两列文字。如何使用JavaSwing实现这一点

我不明白当该换行的时候,我怎么能把文本包装起来。我已经阅读了Java教程,但除了
FontMetrics
之外,我还没有找到任何有用的文本或字符串处理方法


Java API中有没有什么好的方法,或者我可以使用什么好的库来实现这一点?

有趣的问题是,可能有一些复杂的方法使用文档接口;但基本上创建两个并排的JTextPanes()。你可以花很多时间尝试自动测量文本,所以它分成两部分,但我只想在中间找到一个段落边界,粗略地平衡非空白字符的数量。如果文本已经结构化,您可以查看文档

int findSplitBoundary(String x) {
 int midPoint = x.length()/2;
 for (int i = 0; i < Math.min(x.length()/2 - 2, 100); i++) {
  if (x.startsWith(".\n", midPoint - i)) return midPoint- i;
  if (x.startsWith(".\n", midPoint + i)) return midPoint- i;
 }
 return midPoint;
}
另外,您可能会在查看HTMLEditorKit时发现一些运气,尽管我不知道HTML是否提供了这种文本分割

column1.setEditorKit(new HTMLEditorKit());

您可能会使用java.awt.print.PrinterJob类来设置打印机作业,并使用java.awt.font.TextLayout()方法在打印机上呈现图形

您必须将从打印机获得的java.awt.print.PageFormat进行分割,以将输出分成两列

下面是一个使用整个页面的示例


您必须自己管理字符串包装。请看打印示例中的print()方法。您将看到需要哪些Java类来包装文本

澄清一下,你的意思是物理打印,而不是在屏幕上打印?@aioobe:我的意思是用打印机进行物理打印。在我的回答中添加了包装说明。谢谢,你的链接很有帮助。
column1.setEditorKit(new HTMLEditorKit());