更改JTable布局以进行打印而不会影响原始JTable

时间:2018-08-18 06:34:29

标签: swing printing jtable

我想使用JTable的打印方法。第一种方法是一切正常,可以打印表格。 但是,现在我想更改一些属性,例如字体和颜色以进行打印,但无需更改屏幕上的JTable。做这个的最好方式是什么?是否有一种简单的方法来创建现有表的副本以调整其参数并将新表用于打印输出? :thinkingface:

感谢您的任何想法! 托尔斯滕

1 个答案:

答案 0 :(得分:1)

除了克隆外,还可以使用共享模型创建副本。以下是工作示例。您可以通过双击来编辑值。更改都反映在两个表中。在您的情况下,您应该使用具有修改样式的“克隆”进行打印。

import javax.swing.*;
import java.awt.*;

public class CloningTablesExample {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(CloningTablesExample::runApp);
    }

    static void runApp(){
        JFrame window = new JFrame();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setLayout(new GridLayout(2,1));
        window.setSize(400, 300);
        window.setVisible(true);

        JTable original = new JTable(new Object[][]{
                {"v1", "v2", "v3"},
                {"v4", "v5", "v6"}
            },
            new String[]{"col1", "col2", "col3"}
        );
        JTable clone = cloneTable(original);
        clone.setFont(clone.getFont().deriveFont(Font.BOLD));

        window.getContentPane().add(new JScrollPane(original));
        window.getContentPane().add(new JScrollPane(clone), BorderLayout.SOUTH);
    }

    private static JTable cloneTable(JTable original) {
        JTable clone = new JTable();
        clone.setModel(original.getModel());
        return clone;
    }
}