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