我正在尝试:
PrinterJob pj = PrinterJob.getPrinterJob();
pj.printDialog();
并想要在模态打印对话框窗口中更改Java图标(甚至删除它),但我似乎无法。
以下SO question似乎answer it for Java 6,但即使使用以下StackOverflow answer为Java 7提供的信息,我也无法解决。我找不到合适的常量来删除它。
有没有人知道如何为Java 7专门做这个?
答案 0 :(得分:0)
PrinterJob pj = PrinterJob.getPrinterJob();
// Create an Attribute set
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
// A different way to bring Up Native Dialog from Java
aset.add(sun.print.DialogTypeSelection.NATIVE);
// Looks like this class is being moved to javax.print.attribute.standard for Java 7
// To Remove the Icon from the dialog provide an owner.
Frame f = Frame();
aset.add(new sun.print.DialogOwner(f));
pj.printDialog(aset); // The dialog should not have an icon now.
答案 1 :(得分:0)
根据linked question的评论中的建议,您应该尝试
aset.add(javax.print.attribute.standard.DialogTypeSelection.NATIVE);
请查看DialogTypeSelection了解详情
更新了示例
该示例不使用父框架中的图标,这样会很好,但会从打印对话框中删除默认的Java图标...
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterJob;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import sun.print.DialogTypeSelection;
public class TestPrintDialog extends JFrame {
public static void main(String[] args) {
TestPrintDialog window = new TestPrintDialog();
window.setVisible(true);
}
public TestPrintDialog() {
setIconImage(new ImageIcon("NotJavaIcon.png").getImage());
this.setSize(200, 100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
JButton printDialogButton = new JButton("Print Dialog");
printDialogButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
final PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(DialogTypeSelection.NATIVE);
attributes.add(new sun.print.DialogOwner(TestPrintDialog.this));
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.printDialog(attributes);
}
});
this.add(printDialogButton);
}
}
答案 2 :(得分:0)
您指定的代码仅在PrinterJob支持属性sun.print.DialogOwner()时才有效。
PrinterJob.java是一个界面。 getPrinterJob()必须由某些打印服务类实现。此类被指定为系统属性“java.awt.printerjob”。 getPrinterJob()只返回在该系统属性
下定义的类String nm = System.getProperty("java.awt.printerjob", null);
try {
return (PrinterJob)Class.forName(nm).newInstance();
}
所以最终这一切都取决于返回的Class是否支持该特定属性。
您可以使用isAttributeCategorySupported来检查是否支持某个属性。点击“打印”查看结果。
Frame f = new Frame();
DialogOwner dialogOwner = new sun.print.DialogOwner(f);
PrinterJob pj = PrinterJob.getPrinterJob();
boolean ok = pj.printDialog(aset);
System.out.println( "Result : " + dialogOwner.getName() + " supported : " + pj.getPrintService().isAttributeCategorySupported(dialogOwner.getClass()) );
// Result : dialog-owner supported : false
支持的属性可以在下面的链接中找到。
http://docs.oracle.com/javase/7/docs/api/javax/print/attribute/standard/package-summary.html
http://docs.oracle.com/javase/7/docs/technotes/guides/jps/spec/attributes.fm5.html
sun.print.DialogOwner.java不是上面列表的一部分。它不是Internet打印协议(IPP)的一部分。因此不支持。