gpt4 book ai didi

java - 我怎样才能 "pack()"一个可打印的 Java Swing 组件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:17 24 4
gpt4 key购买 nike

我已经实现了一个实现了 Printable 的 Java Swing 组件。如果我将组件添加到 JFrame,并在 JFrame 上执行 this.pack();,它打印完美。但是,如果我不将组件添加到 JFrame,则只会打印一个空白页。

这段代码给出了很好的打印输出:

final PrintablePanel p = new PrintablePanel(pageFormat);
new JFrame() {{ getContentPane().add(p); this.pack(); }};
job.setPrintable(p, pageFormat);
try {
job.print();
} catch (PrinterException ex) {
System.out.println("Fail");
}

但是这段代码给出了一个空白页面:

final PrintablePanel p = new PrintablePanel(pageFormat);
// new JFrame() {{ getContentPane().add(p); this.pack(); }};
job.setPrintable(p, pageFormat);
try {
job.print();
} catch (PrinterException ex) {
System.out.println("Fail");
}

我认为 this.pack(); 是最大的区别。如何在我的可打印组件上执行 pack() 以使其打印良好,而不将其添加到 JFrame?该面板正在使用多个 LayoutManager。

我已经尝试使用 p.validate();p.revalidate(); 但它不起作用。有什么建议么?或者我必须在打印组件之前将它添加到隐藏的 JFrame 中吗?

更新:如果我执行 p.doLayout(); 某些部分会被打印,但子组件不会。并来自 doLayout() 的文档:

Causes this container to lay out its components. Most programs should not call this method directly, but should invoke the validate method instead.

但是 p.validate(); 对我有用。

最佳答案

你可以使用 invalidate() ,这将导致 validate()调用 validateTree() ;或者,使用 validateTree()直接。

@TacB0sS 似乎提出了一个很好的观点:只是不要调用 setVisible() ;这个相关previous question被引用以供引用。

关于java - 我怎样才能 "pack()"一个可打印的 Java Swing 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2903579/

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