2010-09-06 2 views
0

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

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, то рендеринг текста ДЕЛАЕТ работу. Однако, если я создаю новый (как показано выше) код с базовым конструктором, текст не будет отображаться. Это заставляет меня думать, что есть что-то в макете или какой-то подготовительный код, который мне нужно включить для текста, который будет отображаться. Любая помощь вообще ценится!

ответ

0

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

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

+0

Я понял, если я попытаюсь заменить экземпляр «test» JEditorPane на один, который я разместил на графическом интерфейсе (я использую NetBeans). Если я использую экземпляр JEditorPane, созданный NetBeans, я могу вызвать setText, а затем нарисовать в самой следующей строке кода, и он будет отлично отрисован. Однако, если я создаю новый экземпляр, как в приведенном выше коде, возникает проблема с отображением текста. – evan

0

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