有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何打印JTable的特定行/列?

我可以打印完整的JTable,但实际上我更希望只打印JTable的特定部分,例如从第10行到第50行,从第70列到第150列。 怎么做


共 (2) 个答案

  1. # 1 楼答案

    我也面临过这个问题。通过打印前隐藏列和打印后恢复列解决:

    // get column num from settings
    int num = gridSettings.getColumnsOnPage();// first <num> columns of the table will be printed   
    
    final TableColumnModel model = table.getColumnModel();
    
    // list of removed columns. After printing we add them back
    final List<TableColumn> removed = new ArrayList<TableColumn>();
    
    int columnCount = model.getColumnCount();
    
    // hiding columns which are not used for printing
    for(int i = num; i < columnCount; ++i){
        TableColumn col = model.getColumn(num);
        removed.add(col);
        model.removeColumn(col);
    }                                                   
    
    // printing after GUI will be updated
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            // table printing
            try {
                table.print(PrintMode.FIT_WIDTH, null, null, true, hpset, true); // here can be your printing
            } catch (PrinterException e) {
                e.printStackTrace();
            }
    
            // columns restoring
            for(TableColumn col : removed){
                model.addColumn(col);
            }
        }
    });
    

    要打印JTable的特定部分,只需对代码稍加修改

  2. # 2 楼答案

    获取所选片段的单元格边界并计算所需区域(Rectangle),定义clip region以仅绘制所需区域,在可打印的使用Graphics'stranslate()方法中移动渲染