gpt4 book ai didi

java - JScrollPane 和 printAll()

转载 作者:行者123 更新时间:2023-11-30 04:52:24 24 4
gpt4 key购买 nike

我正在开发一个 JPanel 扩展,该扩展仅用于将其内容渲染到 BufferedImage,然后将其用作在 OpenGL 中渲染的纹理。为此,我使用布局管理器等创建了特殊的 JPanel 扩展,就像构建普通的 Swing GUI 一样。

为了将其渲染为图像,我确保首先调用 doLayout,然后使用 printAll(java.awt.Graphics) 方法来打印它以及添加的组件:

    Graphics2D g = image.createGraphics();
printAll(g);

Swing 本身(EDT、RepaintManager 等)从不涉及,我只是创建组件(在任何窗口或框架之外)并直接使用 printAll。

这对于大多数“原子”组件(例如按钮、标签、列表)来说工作得非常好,但是我遇到了 JScrollPane 的问题。无论我尝试什么,JScrollPane 永远不会将其视口(viewport)(主视口(viewport)和滚动条)绘制到给定的 Graphics,而只会绘制其边框,甚至在视口(viewport)上手动调用 printAll 也不会产生任何结果。 p>

我附上了两个屏幕截图,显示了由 JList 和 JButton 组成的简单 GUI 的“之前和之后”。在第一个图像中,我使用原始 JList,在第二个图像中,我使用 new JScrollPane(list) 将其包装到 JScrollPane 中。

Using a JList directly Using a JList wrapped in a JScrollPane

我未能在 JScrollPane 代码中找到与绘制视口(viewport)相关的任何魔法。也许 Swing 需要初始化一些东西,但我忘了。有什么方法可以让这些视口(viewport)显示出来吗?

最佳答案

参见Why does the JTable header not appear in the image?有关将组件渲染到图像的一些一般提示。尝试调用该线程代码中提到的 validate()addNotify()doLayout() 的组合。

关于java - JScrollPane 和 printAll(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com