Как передать параметры для печати JTable? - PullRequest
0 голосов
/ 18 апреля 2019

Таким образом, у меня есть ситуация, когда в разных местах моего кода пользователь может захотеть взять небольшую таблицу JTable и распечатать ее или сохранить как файл CSV. Поэтому я создал JDialog с именем «Output2», который принимает JTable, спрашивает пользователя, что он хочет сделать, и делает так, как просили.

Перепробовал разные варианты, вот так:

(1) Если я использую JTable в качестве параметра, он отлично работает как для печати, так и для файла CSV, но я понимаю, что нет-нет. Но это единственный способ, который я нашел.

(2) Если я передам табличную модель в качестве параметра, все, что я получу, это пустая страница (файл CSV в порядке).

(3) Если я передам 2 массива и "воссоздаю" JTable из них в Output2, я получу то же самое - пустую страницу, CSV хорошо.

Похоже, что Output2 не может создать допустимый JTable, поэтому подпрограмме table.print нечего печатать. Выход CSV всегда работает, поскольку он извлекает данные из массивов, которые встречаются нормально.

Удалив код печати Output2 до минимума, он выглядит следующим образом для варианта 3.

Так, каков «правильный» способ передать необходимые параметры в Output2, чтобы он мог использовать функцию table.print?

public class Output2 extends JDialog {  
   public Output2(String[][] rows, String[] headings)  {
        DefaultTableModel tableModel = new DefaultTableModel(rows, headings);
        JTable tableToOutput = new JTable(tableModel);      
        try {
            if (! tableToOutput.print()) {
                System.err.println("User cancelled printing");
            }
        } catch (java.awt.print.PrinterException e) {
            System.err.format("Cannot print %s%n", e.getMessage());
        }
     }
}
...