2016-06-21 2 views
1

Я пытаюсь создать прокручиваемую JTextPane для отображения HTML. У меня есть работа, за исключением попыток получить правильный размер. Кажется, что бы я ни делал, я не могу влиять на ширину панели.JtextPane с HTML слишком широк

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); 

Я попытался SetSize на JTextPane и JScrollPane, но ни эффектов ширина. Похоже, что он хочет установить ширину в длину самого длинного тега < p>, а не обернуть HTML в указанном размере. То, что я не могу найти, - это способ установить размер JOptionPane, но я понимаю, что это не обязательно, если компоненты правильно отсортированы. Может ли кто-нибудь сказать мне, что мне не хватает? ТИА.

+0

Не могли бы вы показать, где вы добавить свой JScrollPane в? Вероятно, менеджер макета проблемы – Sharcoux

+0

JScrollPane добавлен в последнюю строку. Оператор JOptionPane. –

+0

О, извините. Хорошо, проблема в том, что JOptionPane вызывает pack(), а pack() не заботится о размере. Он учитывает только предпочтительный размер. Позвольте мне написать вам ответ. – Sharcoux

ответ

0

JOptionPane звонки pack(). И pack() использует своих детей, чтобы определить их ширину и высоту. По умолчанию предпочтительной шириной JTextPane является ширина самой длинной линии. Если вы хотите изменить это поведение,

  • Или переопределить getPreferredSize метод JTextPane
  • Или использовать setPreferredSize на вашем JTextPane вместо setSize
+0

Бинго! Вот и все (вариант 2). Благодарю. –

Смежные вопросы