2010-05-17 39 views
0

我有更長的文本保存在一個字符串。我想在單頁上的兩列中打印文本。我如何使用Java Swing來做到這一點?如何使用Java Swing在兩列中打印文本?

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

在Java API中是否有任何好的方法,或者是否有任何可用於此的良好庫?

+0

只是爲了澄清,你的意思是物理印刷,不是在屏幕上打印? – aioobe 2010-05-17 14:56:42

+0

@aioobe:我的意思是用打印機進行物理打印。 – Jonas 2010-05-17 15:00:05

回答

1

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

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

這是一個使用整個頁面的print example

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

+0

爲我的回答添加了一個包裝解釋。 – 2010-05-18 17:06:31

+0

謝謝,你的鏈接很有幫助。 – Jonas 2010-05-18 17:59:33

0

有趣的問題,可能有一些使用文檔界面的複雜方法;但基本上是創建兩個並排的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()); 
相關問題