绘制JComponent而不将其添加到容器中

时间:2011-06-15 13:52:22

标签: java swing rendering paint fullscreen

我已经实现了一个自定义JPanel,其绘制方法我已扩展为在全屏模式下进行大量手动渲染。现在我想将另一个JComponent集成到此(在我的情况下为JPanel,其中包含JScrollpane,其中JTextPane作为其视口)应该显示在我的顶部第一个面板,但是因为我的自定义渲染管道很复杂,将JComponent添加到我的面板并通过AWT系统绘制传统方式不是一种选择(我试过,它最好是古怪,最糟糕的是没有功能),所以我的问题是:是否有可能通过调用常规绘制方法手动命令JComponent在程序中的某一点绘制,而不将其绑定到JContainer,如果是,如何操作我这样做了?

提前感谢您的回答。

5 个答案:

答案 0 :(得分:3)

请参阅this thread上的LabelRenderTest.java来源。标签最终被绘制到屏幕上,但在显示之前它被绘制到BufferedImage

来源的重要部分是..

textLabel.setSize(textLabel.getPreferredSize());

答案 1 :(得分:3)

您可以查看CellRendererPane,看看BasicTableUI如何使用它绘制组件图像。

答案 2 :(得分:2)

是的,只需在对象上调用普通的paint方法,然后传递你想要它绘制的Graphics。但是,这只是绘制它,听起来你希望它可能滚动,这意味着你需要将它添加到自定义JPanel。在这种情况下,只需添加面板,然后添加一个布局管理器,将组件放在您需要的位置。

答案 3 :(得分:2)

您应该为组件设置大小。然后定位它使用你的图形'translate(x,y)将组件定位在所需的Point。

答案 4 :(得分:0)

如果层次结构中有任何更高级别的容器,则可以使用

validate(); repaint(); 

配对。

如果不是,你可以在最后改变它的大小或界限(如+1,-1)以使其重新绘制。