java jtable打印_java – 截断的JTable打印输出

本文展示了一个使用JTextArea作为JTable单元格渲染器的示例,导致在打印时表格内容被截断约60%。尽管尝试了不同计算机、打印机、驱动程序和JVM版本,问题依然存在。提供了一个自包含的Java主类来重现此问题,寻求解决方案。
摘要由CSDN通过智能技术生成

我有一个使用JTextArea作为其TableCellRenderer的JTable,因此表格单元格可以使用自动换行. JTable显示正常.当我通过JTable的

print method将表打印到打印机时,输出总是被截断大约60%的数据.我尝试过不同的计算机和不同的打印机,以及不同的打印机驱动程序,不同的JVM版本(1.5,1.6),但这些都没有帮助.下面是一个自包含的Java主类,可以重现该问题.有任何想法吗?

import java.awt.*;

import java.awt.event.*;

import java.awt.print.*;

import java.util.*;

import javax.swing.*;

import javax.swing.table.*;

public class JTextAreaJTableTest extends javax.swing.JFrame {

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

JTextAreaJTableTest frame = new JTextAreaJTableTest();

frame.setSize(640, 480);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

JButton jButtonPrint;

JScrollPane jScrollPane;

JTable jTable;

JToolBar jToolBar;

public JTextAreaJTableTest() {

initComponents();

DefaultTableModel dtm = (DefaultTableModel) jTable.getModel();

Vector> data = new Vector>();

for (int i = 0; i < 50; i++) {

Vector rowData = new Vector();

rowData.add("Entry " + i);

rowData.add("Lorem ipsum dolor sit amet, consectetur adipisicing"

+ " elit, sed do eiusmod tempor incididunt ut labore et"

+ " dolore magna aliqua. Ut enim ad minim veniam, quis"

+ " nostrud exercitation ullamco laboris nisi ut aliquip"

+ " ex ea commodo consequat. Duis aute irure dolor in"

+ " reprehenderit in voluptate velit esse cillum dolore"

+ " eu fugiat nulla pariatur. Excepteur sint occaecat"

+ " cupidatat non proident, sunt in culpa qui officia"

+ " deserunt mollit anim id est laborum. " + i);

data.add(rowData);

}

Vector columnNames = new Vector();

columnNames.add("Key");

columnNames.add("Value");

dtm.setDataVector(data, columnNames);

jTable.setDefaultRenderer(String.class, null);

jTable.getColumnModel().getColumn(0).setCellRenderer(

new TextAreaCellRenderer());

jTable.getColumnModel().getColumn(1).setCellRenderer(

new TextAreaCellRenderer());

}

private void initComponents() {

jToolBar = new JToolBar();

jButtonPrint = new JButton();

jScrollPane = new JScrollPane();

jTable = new JTable();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

jToolBar.setRollover(true);

jButtonPrint.setText("Print");

jButtonPrint.setFocusable(false);

jButtonPrint.setHorizontalTextPosition(SwingConstants.CENTER);

jButtonPrint.setVerticalTextPosition(SwingConstants.BOTTOM);

jButtonPrint.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButtonPrintActionPerformed(evt);

}

});

jToolBar.add(jButtonPrint);

getContentPane().add(jToolBar, BorderLayout.NORTH);

jScrollPane.setViewportView(jTable);

getContentPane().add(jScrollPane, BorderLayout.CENTER);

}

private void jButtonPrintActionPerformed(ActionEvent evt)

{

try {

jTable.print();

} catch (PrinterException ex) {

ex.printStackTrace();

}

}

public static class TextAreaCellRenderer extends JTextArea implements

TableCellRenderer {

public TextAreaCellRenderer() {

this.setLineWrap(true);

this.setWrapStyleWord(true);

}

public Component getTableCellRendererComponent(JTable table,

Object value, boolean isSelected, boolean hasFocus,

int row, int column) {

this.setText(String.valueOf(value));

TableColumnModel columnModel = table.getColumnModel();

this.setSize(columnModel.getColumn(column).getWidth(), 1);

int newHeight = this.getPreferredSize().height;

if (newHeight > table.getRowHeight(row)) {

table.setRowHeight(row, this.getPreferredSize().height);

}

return this;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值