【问题标题】:Creating a thumbnail of a jEditorPane, the text is not rendered创建一个 jEditorPane 的缩略图,文本不呈现
【发布时间】:2025-12-19 22:05:11
【问题描述】:

我正在尝试创建一个列表,其中显示 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));
} 

我发现如果我在 GUI 中使用 Netbeans 创建的 jEditorPane,那么文本渲染确实可以工作。但是,如果我使用基本构造函数创建一个新的(如上面的代码所示),则文本不会呈现。这让我觉得布局中有些东西或者我需要包含一些准备代码才能渲染文本。任何帮助都非常感谢!

【问题讨论】:

    标签: java user-interface components paint


    【解决方案1】:

    我相信文本组件的渲染比其他组件更复杂,因为您需要在渲染之前解析文本并创建文档。我相信编辑器窗格可能会使用后台线程或 SwingUtilities.invokeLater() 来帮助完成此过程。

    首先,尝试将图像创建代码包装在 SwingUtilities.invokeLater() 中。或者,如果这不起作用,请尝试创建一个单独的线程,该线程会休眠几毫秒,以确保在创建图像之前已解析编辑器窗格文档。

    【讨论】:

    • 我认为可能是这种情况,直到我尝试将 JEditorPane 的“测试”实例替换为我放置在 GUI 上的一个实例(我使用的是 NetBeans)。如果我使用由 NetBeans 创建的 JEditorPane 实例,我可以调用 setText,然后在下一行代码中进行绘制,它将完美呈现。但是,如果我按照上面的代码创建一个新实例,则会出现文本呈现问题。
    【解决方案2】:

    是我,问题的原始发布者。我想通了——问题是我没有指定组件的大小。这让我感到非常愚蠢,我之前没有注意到这一点。显然 Netbeans 隐藏了组件的大小调整部分,因此我假设该组件将采用默认组件的首选大小。然而,在深入挖掘之后,我发现组件的大小为 0,因此实际上根本没有渲染任何内容,除了在组件容器之外溢出的图像(可怕!)

    【讨论】: