JTextArea打印对话框

时间:2015-05-20 13:38:15

标签: java swing printing dialog jtextarea

最近我一直在研究一个使用Java Swing构建GUI的项目。我想在JTextArea中打印文本,因此我写了类似

的内容
boolean printed = textArea.print();

这会打开一个模态对话框。但是,对话框似乎没有父对象,主框架(包含textArea的框架)会阻止打印对话框。

enter image description here

如您所见,打印对话框(底部的细线)位于主JFrame后面。

代码:

import java.awt.*;
import java.awt.print.*;
import javax.swing.*;

public class JTextAreaPrintBug {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(600,600);
                frame.setLocationRelativeTo(null);
                frame.setAlwaysOnTop(true);
                //now add JTextArea
                frame.setLayout(new BorderLayout());
                JTextArea textArea = new JTextArea();
                frame.add(textArea, BorderLayout.CENTER);
                frame.setVisible(true);
                try {
                    textArea.print();
                } catch (PrinterException ex) {}
            }
        });
    }
}

是否可以将打印对话框置于前面(或明确设置打印对话框的父对象),最好不要重新发明轮子?提前谢谢。

编辑:我知道有一行frame.setAlwaysOnTop(true);。我真正想要的是即使主框架始终位于顶部,也要将打印对话框置于最前面。

修改(2):我最终选择了一种变通方法,该方法使用WindowFocusListener中的getOppositeWindow()WindowEvent方法来获取对打印对话框的引用。我仍然使用反射(获取实例类的名称)来检查“对面窗口”是否是打印对话框,或者只是我应用程序中的普通对话框。无论如何,欢迎提供更优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

这是因为这个

frame.setAlwaysOnTop(true);

然后将其更改为false以查看打印窗口。

如果您不希望主窗口阻止其他窗口,请删除该行。无论如何,默认值为false。