【问题标题】:JTextArea print dialogJTextArea 打印对话框
【发布时间】:2015-05-20 13:38:15
【问题描述】:

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

boolean printed = textArea.print();

这会打开一个模式对话框。然而,对话框似乎没有父级,并且主框架(包含textArea 的框架)阻止了打印对话框。

如您所见,打印对话框(底部的细线)位于主 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):我最终选择了一种解决方法,它使用 WindowFocusListenerWindowEvent 中的 getOppositeWindow() 方法来获取对打印对话框的引用。我仍然求助于反射(获取实例类的名称)来检查“对面窗口”是打印对话框,还是我的应用程序中的普通对话框。无论如何,欢迎提供更优雅的解决方案。

【问题讨论】:

  • 你的框架需要一直在顶部吗?
  • 不幸的是,是的。事实上,我已经想到了一种解决方法,它在调用print() 之前调用frame.setAlwaysOnTop(false),然后再恢复设置。但是,我只是想获得对打印对话框的更多控制(例如,我可能需要进一步设置位置),所以我正在寻找一个优雅的解决方案。

标签: java swing printing dialog jtextarea


【解决方案1】:

因为这个

frame.setAlwaysOnTop(true);

因此将其更改为false 以查看打印窗口。

如果您不希望主窗口阻挡其他窗口,请删除该行。反正默认值是假的。

【讨论】:

  • 我知道,这就是为什么我问如何将打印对话框放在前面
  • 如果你让它总是在最前面,那么你不能因为这是你将它设置为 True 时的预期行为。
  • @K139,这是不正确的。如果您选择一个具有 setAlwaysOnTop(true) 的 JFrame 作为 Dialog、JDialog 或 JOptionPane 的父级,它们是可见的。但在有问题的情况下,更改 JTextComponent.print() 对话框设置存在问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多