在不影响原始 JTable 的情况下更改 JTable 布局以进行打印
Change JTable Layout for Printing without affecting original JTable
我想使用JTable 的打印方法。在第一种方法中,一切正常,可以打印 table 。
但现在我想更改一些属性,如打印的字体和颜色,但不更改屏幕上的 JTable。做这个的最好方式是什么?有没有一种简单的方法来创建现有 table 的副本以调整其参数并使用新的 table 进行打印输出? :thinkingface:
感谢任何想法!
托尔斯滕
无需克隆,只需使用共享模型创建一个副本即可。下面是工作示例。您可以通过双击来编辑值。更改反映在两个表中。在您的情况下,您应该使用 'clone' 修改打印样式。
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;
}
}
我想使用JTable 的打印方法。在第一种方法中,一切正常,可以打印 table 。 但现在我想更改一些属性,如打印的字体和颜色,但不更改屏幕上的 JTable。做这个的最好方式是什么?有没有一种简单的方法来创建现有 table 的副本以调整其参数并使用新的 table 进行打印输出? :thinkingface:
感谢任何想法! 托尔斯滕
无需克隆,只需使用共享模型创建一个副本即可。下面是工作示例。您可以通过双击来编辑值。更改反映在两个表中。在您的情况下,您应该使用 'clone' 修改打印样式。
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;
}
}