java swing中jtable打印问题,现在需要打印jtable内容,由于将jtable放到了jpanel中,所以用print方法只能打印部分jtable数据,剩下的滚动条下的数据就不能被打印出来了。因为还有在jtable的表头和结尾加上标注,就不能直接用jtablemodel打印了。现在希望实现,头尾保持不动,中间的jtable数据能全部打印出来,能分页打印出来,但是每页打印出来的都能包含头尾标注如图
jtableswingjava打印
jtableswingjava打印
解决方案 »
- 图片显示问题
- 求必须包含数字和字母,密码长度必须大于等于6位,密码必须由4个或者以上的不同的字母/数字组成的正则表达式
- 从java异常中得到是什么类型异常。高手请见。。??
- 在页面显示list集合中对象的list集合的数据
- 两个应用服务器如何放到同一个事务单元里?
- weblogic jms 新手提问 大家看看有什么问题? 还有就是为什么当队列中无任何消息时,接受消息的这个类一直运行着
- jdk与hibernate兼容问题,十万火急,在线等!!!
- STRUTS的ACTION中的LIST。GET(0)里面的内容是“<html></html>”,有什么办法可以以HTML代码的效果显示到JSP页上
- spring+hibernate开发问题!
- Hibernate插入数据时出现死循环
- java中的流逝时间是干什么用的
- 拍拍网的网址是如何实现的
你参考下,滚动条应该是可以实现的。。
至于你说的不懂的那些,既然你用的是JPanel,你可以额外在JPanel上添加一个JLabel来显示那些不动的信息
这个应该怎么解决,因为是打印整个jpanel,所以滚动条不显示的数据就不能被打印出来了
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导刷新下jpanel试试:new JPanel().updateUI();
new JPanel().repaint();
new JPanel().repaint();
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导刷新下jpanel试试:new JPanel().updateUI();
new JPanel().repaint();
还是不行啊哥,只要我remove了,就添加不进去了panel_center.removeAll();
MTable ab = new MTable(leftTableModel);
panel_center.add(ab);
panel_center.updateUI();
panel_center.repaint();
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导刷新下jpanel试试:new JPanel().updateUI();
new JPanel().repaint();
还是不行啊哥,只要我remove了,就添加不进去了panel_center.removeAll();
MTable ab = new MTable(leftTableModel);
panel_center.add(ab);
panel_center.updateUI();
panel_center.repaint();MTable ab = new MTable(leftTableModel);
panel_center.add(ab);你这个table ab里面有数据吗?没数据是看不出来的!
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导刷新下jpanel试试:new JPanel().updateUI();
new JPanel().repaint();
还是不行啊哥,只要我remove了,就添加不进去了panel_center.removeAll();
MTable ab = new MTable(leftTableModel);
panel_center.add(ab);
panel_center.updateUI();
panel_center.repaint();MTable ab = new MTable(leftTableModel);
panel_center.add(ab);你这个table ab里面有数据吗?没数据是看不出来的!
里面是有数据的
MTable ab = new MTable(leftTableModel);
System.out.println("ab的数据--"+ab.getRowCount());
panel_center.add(ab);
控制台:ab的数据--1
我后来想了种方法,就是根据表格数据来控制页数,然后在打印时remove中间jpanel中的表格,重新做一个限定行数的表格,可以每次remove后,表格就加不进去了,就是把中间的jpanel重新add(jtable),结果打印出来中间就是空白的,求指导刷新下jpanel试试:new JPanel().updateUI();
new JPanel().repaint();
还是不行啊哥,只要我remove了,就添加不进去了panel_center.removeAll();
MTable ab = new MTable(leftTableModel);
panel_center.add(ab);
panel_center.updateUI();
panel_center.repaint();MTable ab = new MTable(leftTableModel);
panel_center.add(ab);你这个table ab里面有数据吗?没数据是看不出来的!
里面是有数据的
MTable ab = new MTable(leftTableModel);
System.out.println("ab的数据--"+ab.getRowCount());
panel_center.add(ab);
控制台:ab的数据--1table 的 size也有吗?你这样代码比较少,比较难定位问题。。一步一步检查
哥你帮我看看代码:
这个是调用打印: ActionListener printAction = new ActionListener() {
public void actionPerformed(ActionEvent e) {
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setJobName(" Print Component ");
// PageFormat pageFormat = pj.defaultPage(); //获取默认打印页面格式
pj.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
// TODO Auto-generated method stub
double total=0.0;
double num=0.0;
total = show_table.getRowCount();
num = 2;
int page = (int)Math.ceil(total/num);
//System.out.println("进来了--"+page+"--pageIndex--"+pageIndex);
if (pageIndex >=page){ return Printable.NO_SUCH_PAGE;}
Graphics2D g2 = (Graphics2D) graphics;
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
//ContentPanel.paint(g2);
// ContentPanel.printAll(g2);
drawdata(g2,pageFormat,page,pageIndex);
return Printable.PAGE_EXISTS;
}
});
if (pj.printDialog() == false)
return;
try {
pj.print();
// print_table.print(JTable.PrintMode.FIT_WIDTH);
//print_table.pri QuotationDialog.this.setVisible(false);
} catch (PrinterException pe) {
System.err.println("Error printing: " + pe.getMessage());
}
}
};
button_print.addActionListener(printAction); 下面是调用drawdata(g2,pageFormat,page,pageIndex)方法:public void drawdata(Graphics2D g2, PageFormat pf, int pg,int pageIndex){
//System.out.println("page页数第--"+pageIndex+"--页");
int temp_total = show_table.getRowCount();
int print_num = pageIndex+1;
System.out.println("print_num--"+print_num);
panel_center.removeAll();
if(print_num==1){
// System.out.println("第1页打印--quotation_id--"+quotation_id);
DefaultTableModel page1TableModel = MyTable.getTable(48, 1, 2);
MTable temp_table1 = new MTable(page1TableModel);
temp_table1.updateUI();
temp_table1.repaint();
panel_center.add(temp_table1);
panel_center.updateUI();
panel_center.repaint();
}
else if(print_num==2){
//System.out.println("第2页打印--quotation_id--"+quotation_id);
DefaultTableModel page2TableModel = MyTable.getTable(48, 2, 2);
MTable temp_table2 = new MTable(page2TableModel);
temp_table2.updateUI();
temp_table2.repaint();
panel_center.add(temp_table2);
panel_center.updateUI();
panel_center.repaint();
// System.out.println("第二页中--"+temp_table2.getRowCount());
}
else{
System.out.println("333333333333333333333333");
}
// MTable op = new MTable(printTableModel);
// op.setBackground(Color.WHITE);
// op.setColumnSelectionAllowed(false);
// op.setRowSelectionAllowed(true);
// op.getColumnModel().getColumn(5).setPreferredWidth(500);
// op.getColumnModel().getColumn(0).setPreferredWidth(60);
// op.getColumnModel().getColumn(1).setPreferredWidth(120);
// op.getColumnModel().getColumn(2).setPreferredWidth(230);
// op.getColumnModel().getColumn(3).setPreferredWidth(60);
// op.getColumnModel().getColumn(4).setPreferredWidth(110);
// op.setFont(new Font("Courier New", Font.PLAIN, 11));
// op.getTableHeader().setFont(new Font("Courier New", Font.PLAIN, 11));
//
// //设置jtable价格居右
// TableColumn column=op.getColumnModel().getColumn(4);//获取某一列名字
// DefaultTableCellRenderer render = new DefaultTableCellRenderer();//设置监听器
// render.setHorizontalAlignment(SwingConstants.RIGHT);//价格右对齐
// column.setCellRenderer(render);
//
// final JScrollPane leftScrollPane = new JScrollPane();
// leftScrollPane.getViewport().setBackground(Color.WHITE); //设置无数据部分的背景色
// panel_center.add(op);
// leftScrollPane.setViewportView(op);
//
// op.setPreferredScrollableViewportSize(new Dimension(780, 420));
// panel_center.setVisible(true);
//leftTableModel.removeRow(1);
panel_center.removeAll();
MTable ab = new MTable(leftTableModel);
System.out.println("ab的数据--"+ab.getRowCount());
panel_center.add(ab);
System.out.println("-------------------------------------------------");
panel_center.updateUI();
panel_center.repaint();
ContentPanel.add(panel_center,BorderLayout.CENTER);
ContentPanel.updateUI();
ContentPanel.repaint();
ContentPanel.paint(g2);
};
其中MyTable.getTable(48, 2, 2);这个方法是通过id来分页显示数据,用来第一页第二页打印:public class MyTable {
private static DefaultTableModel table=null;
public static DefaultTableModel getTable(int id,int pageno, int pagesize){ //String sql是一条select语句
PreparedStatement ps= null;
ResultSet rs = null;
System.out.println("数据库中--pageno--"+pageno+"--pagesize--"+pagesize+"--id--"+id+"----------------------------");
if(table==null){
try {
try {
Connection conn = DBConn.getConnection();
// String sql1 = "select a.inv_code 条形码,b.inv_name_cn 品名,price_selling 价格,b.inv_keyword_cn 关键字 " +
// "from t_quotation_item a,t_inventory b where a.inv_id=b.inv_id and quotation_id=?";
String sql1 = "select t2.* from (select rownum r,t1.* from (" +
"select a.inv_code 条形码,b.inv_name_cn 品名,b.unit_en 单位,price_selling 价格,b.inv_summary_en 备注 from t_quotation_item a,t_inventory b where a.inv_id=b.inv_id and item_status !=20 and quotation_id=? order by a.inv_id) t1 " +
"where rownum<="+pageno*pagesize +") t2 where t2.r>"+(pageno-1)*pagesize;
ps = conn.prepareStatement(sql1);
ps.setInt(1, id);
rs = ps.executeQuery();
Vector heads=new Vector();
ResultSetMetaData rsmd=rs.getMetaData();
int count=rsmd.getColumnCount(); //获得表的列数
for(int i=1;i<=count;i++){ //获得表头,存于Vector heads中
heads.add(rsmd.getColumnLabel(i));
}
//heads.add("操作");
table=new DefaultTableModel(null,heads); //把表头添加到表中
table.setRowCount(0);
while(rs.next()){ //获得表每行的内容,并添加到表中
Vector row=new Vector();
for(int i=1;i<=count;i++)
row.add(rs.getString(i));
row.add("yes");
table.addRow(row);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
}
}
//System.out.println("数据库中--"+table.getRowCount());
return table;
}
}
表格就不显示了,这样表格显示了,但是表格的表头不能被打印出来了,能帮我看看吗,非常感谢import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;import javax.swing.table.DefaultTableModel;public class MyyTable {
private static DefaultTableModel table=null;
private static Vector<Vector<Object>> tempvalue;
public static DefaultTableModel getTable(int id,int pageno, int pagesize){ //String sql是一条select语句
PreparedStatement ps= null;
ResultSet rs = null;
System.out.println("数据库中--pageno--"+pageno+"--pagesize--"+pagesize+"--id--"+id+"----------------------------");
if(table==null){
try {
try {
Connection conn = DBConn.getConnection();
// String sql1 = "select a.inv_code 条形码,b.inv_name_cn 品名,price_selling 价格,b.inv_keyword_cn 关键字 " +
// "from t_quotation_item a,t_inventory b where a.inv_id=b.inv_id and quotation_id=?";
String sql1 = "select t2.* from (select rownum as SN,t1.* from (" +
"select a.inv_code as Part_No,b.inv_name_cn as Part_Name,b.unit_en as Unit,price_selling as Unit_Price,b.inv_summary_en as Summary from t_quotation_item a,t_inventory b where a.inv_id=b.inv_id and item_status !=20 and quotation_id=? order by a.inv_id) t1 " +
"where rownum<="+pageno*pagesize +") t2 where t2.SN>"+(pageno-1)*pagesize;
ps = conn.prepareStatement(sql1);
ps.setInt(1, id);
rs = ps.executeQuery();
// Vector heads=new Vector();
Vector<String> heads = new Vector<String>();
ResultSetMetaData rsmd=rs.getMetaData();
int count=rsmd.getColumnCount(); //获得表的列数
// for(int i=1;i<=count;i++){ //获得表头,存于Vector heads中
// heads.add(rsmd.getColumnLabel(i));
// }
String leftTableColumns[] = { "SN","Part No.","Part Name","Unit","Unit Price","Summary"};
for (int i = 0; i < leftTableColumns.length; i++) {
heads.add(leftTableColumns[i]);
}
// heads.add("操作");
table=new DefaultTableModel(null,heads); //把表头添加到表中
table.setRowCount(0);
while(rs.next()){ //获得表每行的内容,并添加到表中
Vector row=new Vector();
for(int i=1;i<=count;i++){
row.add(rs.getString(1));
row.add(rs.getString(2));
row.add(rs.getString(3));
row.add(rs.getString(4));
row.add(rs.getDouble(5));
row.add(rs.getString(6));
}
table.addRow(row);
}
//以下是显示数据库中的列名的代码
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
}
}
//System.out.println("数据库中--"+table.getRowCount());
return table;
}
}这个是我读取数据库信息放到jtable中的代码,希望得到你的帮助