簡體   English   中英

如何使用 Java Swing 在兩列中打印文本?

[英]How can I print a text in two columns using Java Swing?

我有一個較長的文本保存在一個字符串中。 我想在一個頁面上以兩列的形式打印文本。 如何使用 Java Swing 執行此操作?

我不明白如何在需要使用新行時換行文本。 我已經閱讀了 Java 教程中的 課程:打印,但除了FontMetrics之外,我還沒有找到任何有用的方法來處理文本或字符串。

Java API 中有什么好的方法可以解決這個問題,或者我可以使用什么好的庫?

您可能會使用 java.awt.print.PrinterJob 類來設置打印機作業,並使用 java.awt.font.TextLayout() 方法在打印機上呈現圖形。

您必須分割從打印機獲得的 java.awt.print.PageFormat 才能將輸出分成兩列。

這是使用整個頁面的打印示例

您必須自己管理字符串包裝。 查看打印示例中的 print() 方法。 您將看到需要哪些 Java 類來包裝文本。

有趣的問題,可能有一些使用 Document 接口的復雜方法; 但基本上創建兩個並排的 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;
}

然后將您的文本添加到窗格中:

JTextPane column1 = new JTextPane();
JTextPane column2 = new JTextPane();
split=findSplitBoundary(longText);
column1.setText(longText.substring(0, split));
column2.setText(longText.substring(split));
add(column1, BorderLayout.WEST);
add(column2, BorderLayout.EAST);

此外,您可能會在查看 HTMLEditorKit 時找到一些運氣,盡管我不知道 HTML 是否提供文本拆分的類型。

column1.setEditorKit(new HTMLEditorKit());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM