从文本组件设置打印操作的字体大小
Setting font size for a print operation from a text component
我有以下程序将文本字符串放入 JTextArea 并提供用于打印它的打印对话框:
public class PrintTest
{
private static String fontName = Font.MONOSPACED; // "Verdana"
private static FontUIResource defaultFixedWidthCellFont = new FontUIResource(fontName, Font.PLAIN, 16);
public static FontUIResource getDefaultCellFont() { return defaultFixedWidthCellFont; }
public static void main(String[] args)
{
JFrame frame = new JFrame("Print test");
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setFont(getDefaultCellFont());
textArea.setPreferredSize(new Dimension(400,200));
textArea.setText("one and two and three");
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
try { textArea.print(); }
catch (PrinterException pe) { pe.printStackTrace(); }
}
}
在实际应用中,文本区不需要编辑,需要是这个大小的定宽字体。我愿意使用 JTextArea 以外的文本组件,只要我能将它设置为固定宽度的字体大小并将其放在 JScrollPane 中即可。我不想要任何文字换行。搬上银幕后,没有变化(是报道)。
问题是在打印机上打印的文本太大。我不想缩小 window 中的文本大小。我不想将文本放入文件中并打印文件。文本在我的Java程序中是一个长字符串,不需要将其制作成文件。
当我尝试搜索解决方案时,我得到了很多关于使用 System.out.println 从 eclipse 进行打印的文章,偶尔还有一篇涉及使用 Graphics 对象呈现单个文本字符串的文章。我希望有更简单的东西;该程序确实可以打印,我只需要一种不同的字体。
我尝试将文本放入另一个 JTextArea 并为其提供不同大小的派生字体,但这没有用——我没有呈现该文本区域,不知道这是否重要.这是完成这项工作的方法吗?我已经看到对图形的屏幕外缓冲区的引用,但不知道如何告诉我的文本组件将自身呈现到屏幕外缓冲区。
或者有更好的方法来完成这项工作吗?
用你想要的字体创建一个新的 JTextArea
并打印它而不是屏幕上的字体
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.plaf.FontUIResource;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public static class TestPane extends JPanel {
private static String fontName = Font.MONOSPACED; // "Verdana"
private static FontUIResource defaultFixedWidthCellFont = new FontUIResource(fontName, Font.PLAIN, 32);
private static FontUIResource defaultFixedWidthPrintFont = new FontUIResource(fontName, Font.PLAIN, 8);
public static FontUIResource getDefaultCellFont() {
return defaultFixedWidthCellFont;
}
public static FontUIResource getDefaultPrintFont() {
return defaultFixedWidthPrintFont;
}
public TestPane() {
setLayout(new BorderLayout());
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setFont(getDefaultCellFont());
textArea.setText("one and two and three");
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane);
JButton print = new JButton("Print");
add(print, BorderLayout.SOUTH);
print.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JTextArea printTA = new JTextArea(textArea.getText());
printTA.setFont(getDefaultPrintFont());
try {
printTA.print();
} catch (PrinterException pe) {
pe.printStackTrace();
}
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 200);
}
}
}
我有以下程序将文本字符串放入 JTextArea 并提供用于打印它的打印对话框:
public class PrintTest
{
private static String fontName = Font.MONOSPACED; // "Verdana"
private static FontUIResource defaultFixedWidthCellFont = new FontUIResource(fontName, Font.PLAIN, 16);
public static FontUIResource getDefaultCellFont() { return defaultFixedWidthCellFont; }
public static void main(String[] args)
{
JFrame frame = new JFrame("Print test");
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setFont(getDefaultCellFont());
textArea.setPreferredSize(new Dimension(400,200));
textArea.setText("one and two and three");
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
try { textArea.print(); }
catch (PrinterException pe) { pe.printStackTrace(); }
}
}
在实际应用中,文本区不需要编辑,需要是这个大小的定宽字体。我愿意使用 JTextArea 以外的文本组件,只要我能将它设置为固定宽度的字体大小并将其放在 JScrollPane 中即可。我不想要任何文字换行。搬上银幕后,没有变化(是报道)。
问题是在打印机上打印的文本太大。我不想缩小 window 中的文本大小。我不想将文本放入文件中并打印文件。文本在我的Java程序中是一个长字符串,不需要将其制作成文件。
当我尝试搜索解决方案时,我得到了很多关于使用 System.out.println 从 eclipse 进行打印的文章,偶尔还有一篇涉及使用 Graphics 对象呈现单个文本字符串的文章。我希望有更简单的东西;该程序确实可以打印,我只需要一种不同的字体。
我尝试将文本放入另一个 JTextArea 并为其提供不同大小的派生字体,但这没有用——我没有呈现该文本区域,不知道这是否重要.这是完成这项工作的方法吗?我已经看到对图形的屏幕外缓冲区的引用,但不知道如何告诉我的文本组件将自身呈现到屏幕外缓冲区。
或者有更好的方法来完成这项工作吗?
用你想要的字体创建一个新的 JTextArea
并打印它而不是屏幕上的字体
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.plaf.FontUIResource;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public static class TestPane extends JPanel {
private static String fontName = Font.MONOSPACED; // "Verdana"
private static FontUIResource defaultFixedWidthCellFont = new FontUIResource(fontName, Font.PLAIN, 32);
private static FontUIResource defaultFixedWidthPrintFont = new FontUIResource(fontName, Font.PLAIN, 8);
public static FontUIResource getDefaultCellFont() {
return defaultFixedWidthCellFont;
}
public static FontUIResource getDefaultPrintFont() {
return defaultFixedWidthPrintFont;
}
public TestPane() {
setLayout(new BorderLayout());
JTextArea textArea = new JTextArea();
textArea.setEditable(false);
textArea.setFont(getDefaultCellFont());
textArea.setText("one and two and three");
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane);
JButton print = new JButton("Print");
add(print, BorderLayout.SOUTH);
print.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JTextArea printTA = new JTextArea(textArea.getText());
printTA.setFont(getDefaultPrintFont());
try {
printTA.print();
} catch (PrinterException pe) {
pe.printStackTrace();
}
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 200);
}
}
}