Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JPanel绘制为可打印,当它';它不在屏幕上_Java_Swing_Printing_Paint - Fatal编程技术网

Java 将JPanel绘制为可打印,当它';它不在屏幕上

Java 将JPanel绘制为可打印,当它';它不在屏幕上,java,swing,printing,paint,Java,Swing,Printing,Paint,我使用JPanels模拟打印预览,只是打印内容面板,但是我遇到了一个问题,即如果我尝试打印多个基本上是同一文档的面板,则只有当前显示在屏幕上的面板才会打印 有没有办法强迫JPanel重新绘制,即使它当前不在屏幕上 我试过: 通过以下方式禁用双缓冲: JComponent.setDoubleBuffered() repaitmanager.setDoubleBufferingEnabled() 画两遍 通过paint()绘制 通过repaint() 通过print()绘制 我无法让它在屏幕上

我使用JPanels模拟打印预览,只是打印内容面板,但是我遇到了一个问题,即如果我尝试打印多个基本上是同一文档的面板,则只有当前显示在屏幕上的面板才会打印

有没有办法强迫JPanel重新绘制,即使它当前不在屏幕上

我试过:

  • 通过以下方式禁用双缓冲:
    • JComponent.setDoubleBuffered()
    • repaitmanager.setDoubleBufferingEnabled()
  • 画两遍
  • 通过
    paint()绘制
  • 通过
    repaint()
  • 通过
    print()绘制

我无法让它在屏幕上画画,我觉得我在浪费时间与Swing API搏斗,所以我只是作弊,让面板在打印时显示在屏幕上;现在我有了一个新的“功能”,可以显示正在打印的页面

如果有人知道怎么做,我会留下这个问题,因为我不想把所有的页面都推到用户的脸上


更新


原来问题出在扩展了
java.awt.Container
的组件上,Swing组件必须重写某些处理这种渲染的awt方法。

例如,试试
doLayout()
。@trashgood试过了,运气不好。你试过了吗?@VGR我只是在胡闹。我不知道我是否用错了,但它阻止了所有页面的绘制。