我有更長的文本保存在一個字符串。我想在單頁上的兩列中打印文本。我如何使用Java Swing來做到這一點?如何使用Java Swing在兩列中打印文本?
我不明白我是如何在使用新行時換行的。我在Java教程中已經閱讀了Lesson: Printing,但是我還沒有找到任何有用的方法來處理文本或字符串,除了FontMetrics
。
在Java API中是否有任何好的方法,或者是否有任何可用於此的良好庫?
我有更長的文本保存在一個字符串。我想在單頁上的兩列中打印文本。我如何使用Java Swing來做到這一點?如何使用Java Swing在兩列中打印文本?
我不明白我是如何在使用新行時換行的。我在Java教程中已經閱讀了Lesson: Printing,但是我還沒有找到任何有用的方法來處理文本或字符串,除了FontMetrics
。
在Java API中是否有任何好的方法,或者是否有任何可用於此的良好庫?
你可能會使用java.awt.print.PrinterJob中的類來設置打印機的工作,並呈現使用java.awt.font.TextLayout中的()方法在打印機上的圖形。
您必須劃分從打印機獲得的java.awt.print.PageFormat以將輸出分成兩列。
這是一個使用整個頁面的print example。
你必須管理自己的字符串包裝。查看打印示例中的print()方法。你會看到你需要什麼Java類來包裝文本。
爲我的回答添加了一個包裝解釋。 – 2010-05-18 17:06:31
謝謝,你的鏈接很有幫助。 – Jonas 2010-05-18 17:59:33
有趣的問題,可能有一些使用文檔界面的複雜方法;但基本上是創建兩個並排的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());
只是爲了澄清,你的意思是物理印刷,不是在屏幕上打印? – aioobe 2010-05-17 14:56:42
@aioobe:我的意思是用打印機進行物理打印。 – Jonas 2010-05-17 15:00:05