--- a/jdk/test/java/awt/print/PageFormat/ImageableAreaTest.java Fri Nov 13 18:46:16 2015 +0400
+++ b/jdk/test/java/awt/print/PageFormat/ImageableAreaTest.java Mon Nov 16 10:56:21 2015 +0300
@@ -45,7 +45,7 @@
/**
* @test
- * @bug 8044444
+ * @bug 8044444 8081491
* @summary The output's 'Page-n' footer does not show completely
* @author Alexandr Scherbatiy
* @run main/manual ImageableAreaTest
@@ -58,11 +58,13 @@
@Override
public void run() {
+
createAndShowTestDialog(
"1. Press the Print Table button\n"
+ " Java print dialog should appear.\n"
+ "2. Press the Print button on the Java Print dialog.\n"
- + "2. Check that the page number is correctly printed.\n"
+ + "3. Check that the page number is correctly printed.\n"
+ + "4. Check only the visible part of the table is printed.\n"
+ "If so, press PASS, else press FAIL.",
"Page number is not correctly printed!",
ImageableAreaTest::printWithJavaPrintDialog);
@@ -71,24 +73,47 @@
"1. Press the Print Table button\n"
+ " The table should be printed without the print dialog.\n"
+ "2. Check that the page number is correctly printed.\n"
+ + "3. Check only the visible part of the table is printed.\n"
+ "If so, press PASS, else press FAIL.",
"Page number is not correctly printed!",
ImageableAreaTest::printWithoutPrintDialog);
+
+
createAndShowTestDialog(
"1. Press the Print Table button\n"
+ " Java print dialog should appear.\n"
+ "2. Press the Print button on the Java Print dialog.\n"
+ "3. Check that the table has about half size of the printed page\n"
+ + "4. Check only the visible part of the table is printed.\n"
+ "If so, press PASS, else press FAIL.",
"Custom imageable area is not correctly printed!",
ImageableAreaTest::printWithCustomImageareaSize);
+
+ createAndShowTestDialog(
+ "1. Press the Print Table button\n"
+ + " Java print dialog should appear.\n"
+ + "2. Press the Print button on the Java Print dialog.\n"
+ + "3. Check that the rows with different height is printed.\n"
+ + "4. Check only the visible part of the table is printed.\n"
+ + "If so, press PASS, else press FAIL.",
+ "Row with different height is not correctly printed!",
+ ImageableAreaTest::printDifferentRowHeight);
+
+ createAndShowTestDialog(
+ "1. Press the Print Table button\n"
+ + " Java print dialog should appear.\n"
+ + "2. Press the Print button on the Java Print dialog.\n"
+ + "3. Check that the only 1 row is shown & printed.\n"
+ + "If so, press PASS, else press FAIL.",
+ "Only 1 Row is not correctly printed!",
+ ImageableAreaTest::printOneRowWithJavaPrintDialog);
}
});
}
private static void printWithJavaPrintDialog() {
- final JTable table = createAuthorTable(42);
+ final JTable table = createAuthorTable(50);
Printable printable = table.getPrintable(
JTable.PrintMode.NORMAL,
new MessageFormat("Author Table"),
@@ -110,7 +135,7 @@
private static void printWithoutPrintDialog() {
- final JTable table = createAuthorTable(42);
+ final JTable table = createAuthorTable(50);
PrintRequestAttributeSet pras
= new HashPrintRequestAttributeSet();
pras.add(new Copies(1));
@@ -132,6 +157,50 @@
}
}
+ private static void printDifferentRowHeight() {
+ final JTable table = createAuthorTable(50);
+ table.setRowHeight(15, table.getRowHeight(15)+10);
+ Printable printable = table.getPrintable(
+ JTable.PrintMode.NORMAL,
+ new MessageFormat("Author Table"),
+ new MessageFormat("Page - {0}"));
+
+ PrinterJob job = PrinterJob.getPrinterJob();
+ job.setPrintable(printable);
+
+ boolean printAccepted = job.printDialog();
+ if (printAccepted) {
+ try {
+ job.print();
+ closeFrame();
+ } catch (PrinterException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
+
+ private static void printOneRowWithJavaPrintDialog() {
+ final JTable table = createAuthorTable(1);
+ Printable printable = table.getPrintable(
+ JTable.PrintMode.NORMAL,
+ new MessageFormat("Author Table"),
+ new MessageFormat("Page - {0}"));
+
+ PrinterJob job = PrinterJob.getPrinterJob();
+ job.setPrintable(printable);
+
+ boolean printAccepted = job.printDialog();
+ if (printAccepted) {
+ try {
+ job.print();
+ closeFrame();
+ } catch (PrinterException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
private static void printWithCustomImageareaSize() {
final JTable table = createAuthorTable(18);
PrintRequestAttributeSet printAttributes = new HashPrintRequestAttributeSet();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTable/JTableScrollTest.java Mon Nov 16 10:56:21 2015 +0300
@@ -0,0 +1,182 @@
+/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Color;
+import java.awt.Dialog;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JFrame;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.JButton;
+import javax.swing.table.TableModel;
+import javax.swing.JScrollPane;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.SwingUtilities;
+
+/**
+ * @test
+ * @bug 8081491
+ * @summary Scrolling a JTable creates artifacts
+ * @run main/manual JTableScrollTest
+ */
+public class JTableScrollTest {
+ static JFrame frame = new JFrame();
+ public static void main(String[] args) throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+
+ @Override
+ public void run() {
+ doTest(JTableScrollTest::createTable);
+ }
+ });
+ }
+
+ private static void createTable() {
+ // final
+ final String[] names = {
+ new String("first_name"),
+ new String("last_name"),
+ new String("favorite_color"),
+ new String("favorite_food")
+ };
+
+ // Create the dummy data (a few rows of names)
+ final Object[][] data = {
+ {"Mike", "Albers", "green", "strawberry"},
+ {"Mark", "Andrews", "blue", "grapes"},
+ {"Brian", "Beck", "black", "raspberry"},
+ {"Lara", "Bunni", "red", "strawberry"},
+ {"Roger", "Brinkley", "blue", "peach"},
+ {"Brent", "Christian", "black", "broccoli"},
+ {"Mark", "Davidson", "darkgreen", "asparagus"},
+ {"Jeff", "Dinkins", "blue", "kiwi"},
+ {"Ewan", "Dinkins", "yellow", "strawberry"},
+ {"Amy", "Fowler", "violet", "raspberry"},
+ {"Hania", "Gajewska", "purple", "raspberry"},
+ {"David", "Geary", "blue", "watermelon"},
+ {"Ryan", "Gosling", "pink", "donut"},
+ {"Eric", "Hawkes", "blue", "pickle"},
+ {"Shannon", "Hickey", "green", "grapes"},
+ {"Earl", "Johnson", "green", "carrot"},
+ {"Robi", "Khan", "green", "apple"},
+ {"Robert", "Kim", "blue", "strawberry"},
+ {"Janet", "Koenig", "turquoise", "peach"},
+ {"Jeff", "Kesselman", "blue", "pineapple"},
+ {"Onno", "Kluyt", "orange", "broccoli"},
+ {"Peter", "Korn", "sunpurple", "sparegrass"},
+ {"Rick", "Levenson", "black", "raspberry"},
+ {"Brian", "Lichtenwalter", "blue", "pear"},
+ {"Malini", "Minasandram", "beige", "corn"},
+ {"Michael", "Martak", "green", "strawberry"},
+ {"David", "Mendenhall", "forestgreen", "peach"},
+ {"Phil", "Milne", "pink", "banana"},
+ {"Lynn", "Monsanto", "cybergreen", "peach"},
+ {"Hans", "Muller", "rustred", "pineapple"},
+ {"Joshua", "Outwater", "blue", "pineapple"},
+ {"Tim", "Prinzing", "blue", "pepper"},
+ {"Raj", "Premkumar", "blue", "broccoli"},
+ {"Howard", "Rosen", "green", "strawberry"},
+ {"Ray", "Ryan", "black", "banana"},
+ {"Georges", "Saab", "aqua", "cantaloupe"},
+ {"Tom", "Santos", "blue", "pepper"},
+ {"Rich", "Schiavi", "blue", "pepper"},
+ {"Nancy", "Schorr", "green", "watermelon"},
+ {"Keith", "Sprochi", "darkgreen", "watermelon"},
+ {"Matt", "Tucker", "eblue", "broccoli"},
+ {"Dmitri", "Trembovetski", "red", "tomato"},
+ {"Scott", "Violet", "violet", "banana"},
+ {"Kathy", "Walrath", "darkgreen", "pear"},
+ };
+
+ // Create a model of the data.
+ TableModel dataModel = new AbstractTableModel() {
+ public int getColumnCount() { return names.length; }
+ public int getRowCount() { return data.length;}
+ public Object getValueAt(int row, int col) {return data[row][col];}
+ public String getColumnName(int column) {return names[column];}
+ public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
+ public boolean isCellEditable(int row, int col) {return col != 5;}
+ public void setValueAt(Object aValue, int row, int column) { data[row][column] = aValue; }
+ };
+
+ // Create the table
+ JTable tableView = new JTable(dataModel);
+ tableView.setBackground(Color.WHITE);
+ tableView.setForeground(Color.BLACK);
+ tableView.setSize(600, 800);
+ JScrollPane scrollpane = new JScrollPane(tableView);
+ frame.add(scrollpane);
+ frame.pack();
+ frame.setVisible(true);
+ }
+
+ private static void doTest(Runnable action) {
+ String description =
+ "JTable with rows will be displayed along with scrollbar.\n"
+ + "Scroll the table. Verify no arifacts are shown and rows.\n"
+ + " are correctly displayed.";
+ final JDialog dialog = new JDialog();
+ dialog.setTitle("ScrollArtifactTest ");
+ JTextArea textArea = new JTextArea(description);
+ textArea.setEditable(false);
+ final JButton testButton = new JButton("Create Table");
+ final JButton passButton = new JButton("PASS");
+ passButton.setEnabled(false);
+ passButton.addActionListener((e) -> {
+ dialog.dispose();
+ if (frame != null) {
+ frame.setVisible(false);
+ frame.dispose();
+ }
+ });
+ final JButton failButton = new JButton("FAIL");
+ failButton.setEnabled(false);
+ failButton.addActionListener((e) -> {
+ dialog.dispose();
+ if (frame != null) {
+ frame.setVisible(false);
+ frame.dispose();
+ }
+ throw new RuntimeException("Scrollbar artifact shown");
+ });
+ testButton.addActionListener((e) -> {
+ testButton.setEnabled(false);
+ action.run();
+ passButton.setEnabled(true);
+ failButton.setEnabled(true);
+ });
+ JPanel mainPanel = new JPanel(new BorderLayout());
+ mainPanel.add(textArea, BorderLayout.CENTER);
+ JPanel buttonPanel = new JPanel(new FlowLayout());
+ buttonPanel.add(testButton);
+ buttonPanel.add(passButton);
+ buttonPanel.add(failButton);
+ mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+ dialog.add(mainPanel);
+ dialog.pack();
+ dialog.setVisible(true);
+ }
+
+
+}