Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8257810

Only First page are printed in JTable.scrollRectToVisible

XMLWordPrintable

    • b25
    • x86_64
    • windows_10

      ADDITIONAL SYSTEM INFORMATION :
      Microsoft Windows [Version 10.0.19042.630]
      openjdk version "15.0.1" 2020-10-20
      OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9)
      OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, sharing)

      A DESCRIPTION OF THE PROBLEM :
      When printing a JTable and the table sits inside a JScrollPane and the table is scrolled down only the first pages are printet
      javax.swing.TablePrintable.print(Graphics graphics, PageFormat pageFormat, int pageIndex) returns NO_SUCH_PAGE because of
                  if (!((table.getBounds()).intersects(clip))) {
                      return NO_SUCH_PAGE;
                  }

      Java 8 does not have this check and it prints all pages.

      REGRESSION : Last worked in version 8

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the program and print to ie. a PDF printer.
      Only the first page is printed.
      Disable the line with the comment "Enabling this line..." and the entire table prints.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      All pages are printed
      ACTUAL -
      Only the first page is printed.

      ---------- BEGIN SOURCE ----------
      public class TableTest {
      public static void main(String... args) {
      SwingUtilities.invokeLater(() -> {
      TableModel dataModel = new AbstractTableModel() {
      @Override public int getColumnCount() { return 10; }
      @Override public int getRowCount() {return 1000; }
      @Override public Object getValueAt(int row, int col) { return Integer.valueOf(0==col?row+1:row * col); }
      };
      JTable table = new JTable(dataModel) {
      @Override public Rectangle getBounds() {
      Rectangle bounds = super.getBounds();
      // bounds.y=0; // Workaround - enable this line
      return bounds;
      }
      };
      JScrollPane scrollpane = new JScrollPane(table);
      table.scrollRectToVisible(table.getCellRect(table.getRowCount()-1, 0, false)); // Enabling this line makes print only print 90 rows in Java 14
      JFrame f = new JFrame("Table test Java version: "+ System.getProperty("java.version"));
      f.add(scrollpane);
      f.setSize(1000, 800);
      f.setLocationRelativeTo(null);f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      f.setVisible(true);
      try {
      table.print();
      } catch (PrinterException e) {
      e.printStackTrace();
      }
      });
      }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Enable the line marked with comment Workaround

      FREQUENCY : always


            psadhukhan Prasanta Sadhukhan
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: