2016-06-21 64 views
1

我想創建一個可滾動的JTextPane來顯示HTML。除了試圖讓尺寸合適之外,我還在努力。看起來不管我做什麼,我都無法影響窗格的寬度。帶HTML的JtextPane太寬

JTextPane tp=new JTextPane(); 
     tp.setSize(300,300); 
     tp.setContentType("text/html"); 
     HTMLDocument html=(HTMLDocument) tp.getDocument(); 
     html.putProperty("IgnoreCharsetDirective", new Boolean(true)); 
     HTMLEditorKit htmle=(HTMLEditorKit) tp.getEditorKit(); 
     try { 
      htmle.insertHTML(html,html.getLength(),content,0,0,null); 
     } catch (BadLocationException | IOException e) { 
      // Should not get here 
      e.printStackTrace(); 
     } 
     JScrollPane scroll=new JScrollPane(tp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
     scroll.setSize(200,300); 
     JOptionPane.showMessageDialog(null,scroll,title,JOptionPane.INFORMATION_MESSAGE); 

我試過對JTextPane和JScrollPane進行設置,但都不影響寬度。它似乎希望將寬度設置爲最長的標記的寬度,而不是將HTML包裝在指定的大小範圍內。我似乎無法找到的是一種設置JOptionPane大小的方法,但我的理解是,如果組件尺寸正確,則不應該有必要。有人能告訴我我錯過了什麼嗎? TIA。

+0

你能告訴你哪裏添加JScrollPane中投入使用setPreferredSize?這可能是佈局管理器的問題 – Sharcoux

+0

JScrollPane添加在最後一行。 JOptionPane語句。 –

+0

哦,對不起。好的,問題是JOptionPane調用pack(),pack()不關心大小。它只考慮preferredSize。讓我給你寫一個答案。 – Sharcoux

回答

0

JOptionPane來電pack()。而pack()使用其子女的preferredSize來決定其寬度和高度。默認情況下,JTextPane的首選寬度是最長行的寬度。如果你想改變這種行爲,

  • 或覆蓋的JTextPane
  • getPreferredSize方法或上,而不是你的JTextPanesetSize
+0

賓果!就是這樣(選項2)。謝謝。 –