Создание эскиза jEditorPane, текст не отображается - PullRequest
0 голосов
/ 07 сентября 2010

Я пытаюсь создать список, в котором для jEditorPane отображаются эскизы - аналогично тому, как в powerpoint вы можете видеть предварительный просмотр каждого слайда.Однако по какой-то причине изображения и фоны в моем редакторе отображаются, а текст - нет.Пример кода:

private void createThumbNailView(javax.swing.event.TreeSelectionEvent evt) {                                    

    JEditorPane test = new JEditorPane();
    JScrollPane jsp = new JScrollPane();

    test.setEditorKit(edkit);
    test.setText("TEST TEXT - THIS WILL NOT BE RENDERED");
    test.setMargin(new java.awt.Insets(30, 30, 30, 60));

    jsp.setViewportView(test);

    BufferedImage bi = new BufferedImage(300,250,BufferedImage.TYPE_INT_RGB);
    test.paint(bi.getGraphics());
    jLabel1.setIcon(new ImageIcon(bi));
} 

Я обнаружил, что если я использую jEditorPane, созданный Netbeans, в GUI, то рендеринг текста работает.Тем не менее, если я создаю новый (как показано в коде выше) с базовым конструктором, то текст не отображается.Это заставляет меня думать, что в макете или в каком-то подготовительном коде есть что-то, что мне нужно включить для отображения текста.Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

Это я, оригинальный постер вопроса. Я понял это - проблема была в том, что я не указал размер компонента. Это заставляет меня чувствовать себя действительно глупо, что я не заметил этого раньше. Очевидно, Netbeans скрывает размерную часть компонентов, и поэтому я предположил, что компонент примет предпочтительный размер компонента по умолчанию. Однако, покопавшись немного глубже, я обнаружил, что размер компонента равен 0, и поэтому на самом деле ничего не визуализируется, за исключением изображений, которые переполняются за пределами контейнера компонента (страшно!)

0 голосов
/ 07 сентября 2010

Я считаю, что рендеринг текстовых компонентов сложнее, чем других компонентов, так как вам нужно проанализировать текст и создать документ, прежде чем можно будет выполнить рендеринг.Я полагаю, что панель редактора может использовать фоновый поток или SwingUtilities.invokeLater (), чтобы помочь с этим процессом.

Итак, сначала попробуйте обернуть код создания изображения в SwingUtilities.invokeLater ().Или, если это не работает, попробуйте создать отдельный поток, который спит несколько миллисекунд, чтобы убедиться, что документ панели редактора был проанализирован перед созданием изображения.

...