Java 如何在PrinterJob.pageDialog中启用横向定向

Java 如何在PrinterJob.pageDialog中启用横向定向,java,printing,Java,Printing,我想在PrinterJob.pageDialog中设置页面格式,唯一缺少的是更改页面方向,因为横向模式的单选按钮已禁用 问题是,我不知道如何在此对话框中启用表示横向模式的单选按钮。仅当在打开对话框之前将“方向模式”设置为“横向”时,才会启用该选项。这对我来说不是一个好的解决方案,因为我总是想在用户再次打开对话框时向用户显示他以前的选择,同时给他更改对话框的选项 我真的想避免自己建立一个对话,因为这看起来很完美 我听说这可能是一个问题,目前只有在窗口的机器。 请让我知道它是否也发生在其他平台上 提

我想在PrinterJob.pageDialog中设置页面格式,唯一缺少的是更改页面方向,因为横向模式的单选按钮已禁用

问题是,我不知道如何在此对话框中启用表示横向模式的单选按钮。仅当在打开对话框之前将“方向模式”设置为“横向”时,才会启用该选项。这对我来说不是一个好的解决方案,因为我总是想在用户再次打开对话框时向用户显示他以前的选择,同时给他更改对话框的选项

我真的想避免自己建立一个对话,因为这看起来很完美

我听说这可能是一个问题,目前只有在窗口的机器。 请让我知道它是否也发生在其他平台上

提前谢谢



import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.print.PageFormat;
import java.awt.print.PrinterJob;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;

public class PrintDialogSSCCE extends JFrame
{
    private static final long serialVersionUID = 1L;
    private PageFormat pageFormat;

    public PrintDialogSSCCE()
    {
        super();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        PrinterJob pj = PrinterJob.getPrinterJob();
        pageFormat = pj.defaultPage();
//      pageFormat.setOrientation(PageFormat.LANDSCAPE);
        JMenuBar mb = new JMenuBar();
        JMenu file = new JMenu("File", true);
        file.add(new FilePageSetupAction()).setAccelerator(
                KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK
                | Event.SHIFT_MASK));
        mb.add(file);
        setJMenuBar(mb);
    }

    public class FilePageSetupAction extends AbstractAction
    {
        private static final long serialVersionUID = 1L;

        public FilePageSetupAction()
        {
            super("Page setup...");
        }
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            PrinterJob pj = PrinterJob.getPrinterJob();
            pageFormat = pj.pageDialog(pageFormat);
        }
    }

    public static void main(String[] args)
    {
        PrintDialogSSCCE pd = new PrintDialogSSCCE();
        pd.setSize(300, 300);
        pd.setVisible(true);
    }
}


根据垃圾神的建议,我将自己的发现作为这个问题的答案,这样我们就可以完成这个问题


嗯。我把它整理好了。谢谢karakuricoder。你的信息引导我找到解决方案。当我将默认打印机设置为MS Office Image Writer时,问题始终存在。如果我选择了其他任何选项,它就可以了。现在我想知道其他人是否也有同样的问题?也许可以解释一下原因?该死的微软打印机,我在这个问题后浪费了好几个小时。说实话,我还是喜欢这台打印机最近我已经测试了很多JavaAPI,查看文档打印到文件时的外观非常有用。非常感谢


起来。我看这取决于打印机的设置。我和他们玩了一段时间,但我仍然无法将页面格式的两个选项都设置为“纵向”

唯一可行的解决方案是,不要将MS打印机设置为默认打印机


祝你好运,波罗。

我在Windoze 7上尝试了上面的代码,它打开了启用横向单选按钮的对话框。您在什么平台上测试过?Windows 7 Professional。Java1.6。我不知道这里还有什么重要的东西。卡拉库里科德附言:在调用pageDialog之前,它没有设置为横向显示?好的。我把它整理好了。谢谢karakuricoder。你的信息引导我找到解决方案。当我将默认打印机设置为MS Office Image Writer时,问题始终存在。如果我选择了其他任何选项,它就可以了。现在我想知道其他人是否也有同样的问题?也许可以解释一下原因?该死的微软打印机,我在这个问题后浪费了好几个小时。说实话,我还是喜欢这台打印机最近我已经测试了很多JavaAPI,查看文档打印到文件时的外观非常有用。非常感谢,谢谢。我看这取决于打印机的设置。我和他们玩了一段时间,但我仍然无法将页面格式的两个选项都设置为“纵向”。+1用于。作为参考,我在MacOSX上看不到任何意外。我想说,继续吧,把你目前的发现作为一个答案。