jdk/test/javax/swing/JTable/PrintManualTest_FitWidthMultiple.java
changeset 43077 785bbcd9812a
equal deleted inserted replaced
43076:a2d90fcf0a70 43077:785bbcd9812a
       
     1 /*
       
     2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 /*
       
    24  * @test
       
    25  * @bug 8170349
       
    26  * @summary  Verify if printed content is within border and all columns are
       
    27  *           printed for PrintMode.FIT_WIDTH
       
    28  * @run main/manual PrintManualTest_FitWidthMultiple
       
    29  */
       
    30 
       
    31 import java.awt.BorderLayout;
       
    32 import java.awt.event.ActionEvent;
       
    33 import java.awt.event.ActionListener;
       
    34 import java.awt.event.WindowAdapter;
       
    35 import java.awt.event.WindowEvent;
       
    36 import java.text.MessageFormat;
       
    37 import java.util.concurrent.CountDownLatch;
       
    38 import java.util.concurrent.TimeUnit;
       
    39 import javax.print.attribute.HashPrintRequestAttributeSet;
       
    40 import javax.print.attribute.PrintRequestAttributeSet;
       
    41 import javax.swing.AbstractAction;
       
    42 import javax.swing.JButton;
       
    43 import javax.swing.JComponent;
       
    44 import javax.swing.JFrame;
       
    45 import javax.swing.JPanel;
       
    46 import javax.swing.JScrollPane;
       
    47 import javax.swing.JTable;
       
    48 import javax.swing.JTextArea;
       
    49 import javax.swing.KeyStroke;
       
    50 import javax.swing.SwingUtilities;
       
    51 import javax.swing.table.AbstractTableModel;
       
    52 import javax.swing.table.TableModel;
       
    53 
       
    54 public class PrintManualTest_FitWidthMultiple extends JTable implements Runnable {
       
    55 
       
    56     static boolean testPassed;
       
    57     static JFrame fr = null;
       
    58     static JFrame instructFrame = null;
       
    59     private final CountDownLatch latch;
       
    60 
       
    61     public PrintManualTest_FitWidthMultiple(CountDownLatch latch){
       
    62         this.latch = latch;
       
    63     }
       
    64 
       
    65     @Override
       
    66     public void run() {
       
    67         try {
       
    68             createUIandTest();
       
    69         } catch (Exception ex) {
       
    70             dispose();
       
    71             latch.countDown();
       
    72             throw new RuntimeException(ex.getMessage());
       
    73         }
       
    74     }
       
    75 
       
    76     private void createUIandTest() throws Exception {
       
    77         /*Message Format Header and Footer */
       
    78         final MessageFormat header=new MessageFormat("JTable Printing Header {0}");
       
    79         final MessageFormat footer = new MessageFormat("JTable Printing Footer {0}");
       
    80 
       
    81         SwingUtilities.invokeAndWait(new Runnable() {
       
    82             @Override
       
    83             public void run() {
       
    84                 /* Instructions Section */
       
    85                 String info =
       
    86                     " \nThis test case brings up JTable with more Columns and Rows \n"+
       
    87                     "Press the Print Button. It Prints in PRINT_MODE_FIT_WIDTH \n" +
       
    88                     "It Pops up the Print Dialog. Check if Job/Print Attributes in the\n" +
       
    89                     "Print Dialog are configurable. Default Print out will be in Landscape \n"+
       
    90                     "The Print out should have JTable Centered on the Print out with thin borders \n"+
       
    91                     "Prints out with Header and Footer. \n"+
       
    92                     "The JTable should have all columns printed within border";
       
    93 
       
    94                 instructFrame=new JFrame("PrintManualTest_NormalSingle");
       
    95                 JPanel panel=new JPanel(new BorderLayout());
       
    96                 JButton button1 = new JButton("Pass");
       
    97                 JButton button2 = new JButton("Fail");
       
    98                 button1.addActionListener((e) -> {
       
    99                     testPassed = true;
       
   100                     dispose();
       
   101                     latch.countDown();
       
   102                 });
       
   103                 button2.addActionListener((e) -> {
       
   104                     testPassed = false;
       
   105                     dispose();
       
   106                     latch.countDown();
       
   107                 });
       
   108                 JPanel btnpanel1 = new JPanel();
       
   109                 btnpanel1.add(button1);
       
   110                 btnpanel1.add(button2);
       
   111                 panel.add(addInfo(info),BorderLayout.CENTER);
       
   112                 panel.add(btnpanel1, BorderLayout.SOUTH);
       
   113                 instructFrame.getContentPane().add(panel);
       
   114                 instructFrame.setBounds(600,100,350,350);
       
   115 
       
   116                 /* Print Button */
       
   117                 final JButton printButton=new JButton("Print");
       
   118 
       
   119                 /* Table Model */
       
   120                 final TableModel datamodel=new AbstractTableModel(){
       
   121                     @Override
       
   122                     public int getColumnCount() { return 50;}
       
   123                     @Override
       
   124                     public int getRowCount() { return 50; }
       
   125                     @Override
       
   126                     public Object getValueAt(int row, int column){ return new Integer(row*column);}
       
   127                 };
       
   128 
       
   129                 /* Constructing the JTable */
       
   130                 final JTable table=new JTable(datamodel);
       
   131 
       
   132                 /* Putting the JTable in ScrollPane and Frame Container */
       
   133                 JScrollPane scrollpane=new JScrollPane(table);
       
   134                 fr = new JFrame("PrintManualTest_FitWidthMultiple");
       
   135                 fr.getContentPane().add(scrollpane);
       
   136 
       
   137                 /* Light Weight Panel for holding Print and other buttons */
       
   138                 JPanel btnpanel=new JPanel();
       
   139                 btnpanel.add(printButton);
       
   140                 fr.getContentPane().add(btnpanel,BorderLayout.SOUTH);
       
   141                 fr.setBounds(0,0,400,400);
       
   142                 fr.setSize(500,500);
       
   143 
       
   144                 /* Binding the KeyStroke to Print Button Action */
       
   145                 fr.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ctrl P"), "printButton");
       
   146                 fr.getRootPane().getActionMap().put("printButton", new AbstractAction(){
       
   147                     @Override
       
   148                     public void actionPerformed(ActionEvent e){
       
   149                         printButton.doClick();
       
   150                     }
       
   151                 });
       
   152 
       
   153                 /* Container and Component Listeners */
       
   154                 fr.addWindowListener(new WindowAdapter() {
       
   155                     @Override
       
   156                     public void windowClosing(WindowEvent e) {
       
   157                         dispose();
       
   158                         if (testPassed == false) {
       
   159                             throw new RuntimeException(" User has not executed the test");
       
   160                         }
       
   161                     }
       
   162                 });
       
   163 
       
   164                 final PrintRequestAttributeSet prattr=new HashPrintRequestAttributeSet();
       
   165                 prattr.add(javax.print.attribute.standard.OrientationRequested.LANDSCAPE);
       
   166 
       
   167                 printButton.addActionListener(new ActionListener(){
       
   168                     @Override
       
   169                     public void actionPerformed(ActionEvent ae){
       
   170                         try{
       
   171                             table.print(JTable.PrintMode.FIT_WIDTH, header,footer,true,prattr,true);
       
   172                         } catch(Exception e){}
       
   173                     }
       
   174                 });
       
   175                 instructFrame.setVisible(true);
       
   176                 fr.setVisible(true);
       
   177             }
       
   178         });
       
   179     }
       
   180 
       
   181     public void dispose() {
       
   182         instructFrame.dispose();
       
   183         fr.dispose();
       
   184     }
       
   185 
       
   186     public JScrollPane addInfo(String info) {
       
   187         JTextArea jta = new JTextArea(info,8,20);
       
   188         jta.setEditable(false);
       
   189         jta.setLineWrap(true);
       
   190         JScrollPane sp = new JScrollPane(jta);
       
   191         return sp;
       
   192 
       
   193     }
       
   194 
       
   195     /* Main Method */
       
   196 
       
   197     public static void main(String[] argv) throws Exception {
       
   198         final CountDownLatch latch = new CountDownLatch(1);
       
   199         PrintManualTest_FitWidthMultiple test = new PrintManualTest_FitWidthMultiple(latch);
       
   200         Thread T1 = new Thread(test);
       
   201         T1.start();
       
   202 
       
   203         // wait for latch to complete
       
   204         boolean ret = false;
       
   205         try {
       
   206             ret = latch.await(60, TimeUnit.SECONDS);
       
   207         } catch (InterruptedException ie) {
       
   208             throw ie;
       
   209         }
       
   210         if (!ret) {
       
   211             test.dispose();
       
   212             throw new RuntimeException(" User has not executed the test");
       
   213         }
       
   214         if (test.testPassed == false) {
       
   215             throw new RuntimeException("printed contents is beyond borders");
       
   216         }
       
   217     }
       
   218 }