完整的代码可以在github上找到。打印部分位于src/main/java/antafes/vampireEditor/gui/BaseWindow.java
下,页面对象可以在src/main/java/antafes/vampireEditor/print/
中找到。
对我来说另一件奇怪的事情是,lambda函数中的部分被调用了大约10次…这正常吗?
如果您需要进一步的信息,请让我知道。
如果我使用一个字符已经显示的打印预览元素,至少对于当前选择的页面(这三行被注释掉了),我已经设法让它工作了。
if (!this.isAnyCharacterLoaded()) {
return;
}
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setJobName(this.language.translate("printCharacter"));
printerJob.setPrintable ((graphics, pageFormat, pageNum) -> {
if (pageNum > 0){
return Printable.NO_SUCH_PAGE;
}
Graphics2D graphics2D = (Graphics2D) graphics;
graphics2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
//CharacterTabbedPane pane = (CharacterTabbedPane) charactersTabPane.getSelectedComponent();
//PrintPreviewPanel printPreview = pane.getPrintPreview();
//printPreview.printContent(graphics2D);
PrintBase page;
switch (pageNum) {
case 0:
default:
page = new General(this.getActiveCharacter(), false);
break;
}
Dimension dimension = new Dimension((int) pageFormat.getWidth(), (int) pageFormat.getHeight());
page.setSize(dimension);
page.create();
page.paint(graphics2D);
return Printable.PAGE_EXISTS;
});
if (!printerJob.printDialog()) {
return;
}
try {
printerJob.print();
} catch (PrinterException ex) {
// handle exception
}
页面上的内容应像打印预览中那样显示。
发布于 2019-06-27 04:13:39
问题是,组件布局不正确。@second给我指明了正确的方向。按照他的建议,我研究了一下ScreenImage
类。使用这个类创建图像是可行的,因此我开始使用ScreenImage
类实现打印过程。
经过一段时间和对这个过程的一些思考之后,我发现我只需要这个类中的一个方法。我采用了layoutComponent()
方法,并且只使用了它。在使用中,元素被正确布局,现在以我想要的方式显示出来。
private void layoutComponent(Component component)
{
synchronized (component.getTreeLock())
{
component.doLayout();
if (component instanceof Container)
{
for (Component child : ((Container)component).getComponents())
{
this.layoutComponent(child);
}
}
}
}
稍后对论文进行一些调整,一切看起来都应该是这样的:)
再次感谢@second为我指明了正确的方向。
https://stackoverflow.com/questions/56647884
复制相似问题