我有一个奇怪的难题。我目前正在尝试为我正在处理的 Eclipse 项目制作一个可运行的 Jar,其中有许多 JTextField 和 JFormattedTextField 都很好地排列在 JPanel 中。然后我将这些JPanel 打印出来,使用iText 的漂亮PdfWriter。
问题是这样的:在 Eclipse 中,这打印得很好。当我将项目导出到可运行的 jar 中时,我得到以下信息:
所有这些黑色矩形都是我的 JTextField 和 JFormattedTextField 所在的位置。
有谁知道可能是什么原因造成的?这就是我打印东西的方式,记住,它在 Eclipse 中工作,但在导出为可运行 jar 时不能:
private void print() throws DocumentException, IOException {
Document document = new Document(PageSize.LETTER, 0, 0, 0, 0);
File file = new File(System.getProperty("user.home") + File.separator
+ "Desktop" + File.separator + "temp.pdf");
if (!file.exists()) {
file.createNewFile();
}
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream(file));
document.open();
PdfContentByte contentByte = writer.getDirectContent();
int x = (int) document.getPageSize().getWidth() / 2 - 250;
int y = (int) document.getPageSize().getHeight() - 375;
for (int i = 0; i < jobs.size(); i++) {
jobs.get(i).setFocusable(false);
contentByte.moveTo(0, y + 235);
contentByte.lineTo(document.getPageSize().getWidth(), y + 235);
contentByte.closePathStroke();
y += 5;
PdfTemplate template = contentByte.createTemplate(600, 250);
@SuppressWarnings("deprecation")
Graphics2D g2 = template.createGraphics(600, 250);
jobs.get(i).print(g2);
g2.dispose();
contentByte.addTemplate(template, x, y);
y -= 105;
jobs.get(i).setFocusable(true);
}
contentByte.moveTo(0, y + 235);
contentByte.lineTo(document.getPageSize().getWidth(), y + 235);
contentByte.closePathStroke();
y = 25;
PdfTemplate template = contentByte.createTemplate(600, 25);
@SuppressWarnings("deprecation")
Graphics2D g2 = template.createGraphics(600, 25);
total.setFocusable(false);
totalPanel.setOpaque(false);
totalPanel.print(g2);
g2.dispose();
contentByte.addTemplate(template, x - 65, y);
total.setFocusable(true);
totalPanel.setOpaque(true);
document.close();
}
感谢您所有的帮助!