【发布时间】:2012-03-26 13:46:28
【问题描述】:
我刚刚开始学习使用 Java Swing 进行打印,所以如果这个问题非常幼稚,请多多包涵。
我有一个相当复杂的布局,其中包含多个包含 JLabels 的 JPanel 的 JPanel。我想以某种方式在打印机上很好地打印出来。
我知道我可以在表示打印页面的 Graphics2D 对象上“绘画”,但这需要我单独定位每个对象。我希望能够使用 Swing 布局管理器来布局我页面上的项目。一种方法是调用jp.paint(g2d),其中jp 是JPanel,g2d 是表示打印页面的Graphics2D 对象。但是,据我所知,这只会打印一个在屏幕上实际可见的 JPanel。如果 JPanel 不可见,则不会打印。
那么有没有什么方法可以在不首先在计算机屏幕上显示 JPanel 的情况下布局(相当复杂的)JPanel 并将其发送到打印机?
或者我在这里完全走错了路?
【问题讨论】:
-
不,据我所知,这是关于打印可见对象的。我想打印一个不可见的对象。
-
当您构建要打印的面板时,执行 pack() 但不要 setVisible(true),面板将打印而不显示在屏幕上。试一试。
-
我试过了。我以您提到的 URL 中的示例并添加了以下代码:
JFrame f2 = new JFrame("xx"); f2.setLayout(new BoxLayout(f2.getContentPane(), BoxLayout.PAGE_AXIS)); f2.add(new JLabel("xxx")); f2.add(new JLabel("yyy")); f2.pack();此外,我将要打印的框架从f更改为f2。输出为空白!然后我添加了f2.setVisible(true),框架打印得很好,但不再是不可见的。