1 /*
2  * Copyright (c) 2007, 2015, 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 import javax.swing.*;
25 import javax.swing.table.AbstractTableModel;
26 import javax.swing.table.TableModel;
27 import java.awt.*;
28 import java.util.Locale;
29 
30 /*
31  * @test
32  * @summary Check that JTable constructor and methods do not throw unexpected
33  *          exceptions in headless mode
34  * @run main/othervm -Djava.awt.headless=true HeadlessJTable
35  */
36 
37 public class HeadlessJTable {
main(String args[])38     public static void main(String args[]) {
39         JTable t;
40         t = new JTable();
41         final Object[][] data = {
42                 {"cell_1_1", "cell_1_2", "cell_1_3"},
43                 {"cell_2_1", "cell_2_2", "cell_2_3"},
44                 {"cell_3_1", "cell_3_2", "cell_3_3"},
45                 {"cell_4_1", "cell_4_2", "cell_4_3"},
46         };
47 
48         TableModel dataModel = new AbstractTableModel() {
49             public int getColumnCount() { return 3; }
50             public int getRowCount() { return data.length;}
51             public Object getValueAt(int row, int col) {return data[row][col];}
52         };
53         t = new JTable(dataModel);
54 
55         t.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
56         t.getAutoResizeMode();
57         t.getColumnModel().getColumn(1).setMinWidth(5);
58         t.getTableHeader().setReorderingAllowed(false);
59         t.getTableHeader().setResizingAllowed(false);
60 
61         t.getAccessibleContext();
62         t.isFocusTraversable();
63         t.setEnabled(false);
64         t.setEnabled(true);
65         t.requestFocus();
66         t.requestFocusInWindow();
67         t.getPreferredSize();
68         t.getMaximumSize();
69         t.getMinimumSize();
70         t.contains(1, 2);
71         Component c1 = t.add(new Component(){});
72         Component c2 = t.add(new Component(){});
73         Component c3 = t.add(new Component(){});
74         Insets ins = t.getInsets();
75         t.getAlignmentY();
76         t.getAlignmentX();
77         t.getGraphics();
78         t.setVisible(false);
79         t.setVisible(true);
80         t.setForeground(Color.red);
81         t.setBackground(Color.red);
82         for (String font : Toolkit.getDefaultToolkit().getFontList()) {
83             for (int j = 8; j < 17; j++) {
84                 Font f1 = new Font(font, Font.PLAIN, j);
85                 Font f2 = new Font(font, Font.BOLD, j);
86                 Font f3 = new Font(font, Font.ITALIC, j);
87                 Font f4 = new Font(font, Font.BOLD | Font.ITALIC, j);
88 
89                 t.setFont(f1);
90                 t.setFont(f2);
91                 t.setFont(f3);
92                 t.setFont(f4);
93 
94                 t.getFontMetrics(f1);
95                 t.getFontMetrics(f2);
96                 t.getFontMetrics(f3);
97                 t.getFontMetrics(f4);
98             }
99         }
100         t.enable();
101         t.disable();
102         t.reshape(10, 10, 10, 10);
103         t.getBounds(new Rectangle(1, 1, 1, 1));
104         t.getSize(new Dimension(1, 2));
105         t.getLocation(new Point(1, 2));
106         t.getX();
107         t.getY();
108         t.getWidth();
109         t.getHeight();
110         t.isOpaque();
111         t.isValidateRoot();
112         t.isOptimizedDrawingEnabled();
113         t.isDoubleBuffered();
114         t.getComponentCount();
115         t.countComponents();
116         t.getComponent(1);
117         t.getComponent(2);
118         Component[] cs = t.getComponents();
119         t.getLayout();
120         t.setLayout(new FlowLayout());
121         t.doLayout();
122         t.layout();
123         t.invalidate();
124         t.validate();
125         t.remove(0);
126         t.remove(c2);
127         t.removeAll();
128         t.preferredSize();
129         t.minimumSize();
130         t.getComponentAt(1, 2);
131         t.locate(1, 2);
132         t.getComponentAt(new Point(1, 2));
133         t.isFocusCycleRoot(new Container());
134         t.transferFocusBackward();
135         t.setName("goober");
136         t.getName();
137         t.getParent();
138         t.getGraphicsConfiguration();
139         t.getTreeLock();
140         t.getToolkit();
141         t.isValid();
142         t.isDisplayable();
143         t.isVisible();
144         t.isShowing();
145         t.isEnabled();
146         t.enable(false);
147         t.enable(true);
148         t.enableInputMethods(false);
149         t.enableInputMethods(true);
150         t.show();
151         t.show(false);
152         t.show(true);
153         t.hide();
154         t.getForeground();
155         t.isForegroundSet();
156         t.getBackground();
157         t.isBackgroundSet();
158         t.getFont();
159         t.isFontSet();
160         Container c = new Container();
161         c.add(t);
162         t.getLocale();
163         for (Locale locale : Locale.getAvailableLocales())
164             t.setLocale(locale);
165 
166         t.getColorModel();
167         t.getLocation();
168 
169         boolean exceptions = false;
170         try {
171             t.getLocationOnScreen();
172         } catch (IllegalComponentStateException e) {
173             exceptions = true;
174         }
175         if (!exceptions)
176             throw new RuntimeException("IllegalComponentStateException did not occur when expected");
177 
178         t.location();
179         t.setLocation(1, 2);
180         t.move(1, 2);
181         t.setLocation(new Point(1, 2));
182         t.getSize();
183         t.size();
184         t.setSize(1, 32);
185         t.resize(1, 32);
186         t.setSize(new Dimension(1, 32));
187         t.resize(new Dimension(1, 32));
188         t.getBounds();
189         t.bounds();
190         t.setBounds(10, 10, 10, 10);
191         t.setBounds(new Rectangle(10, 10, 10, 10));
192         t.isLightweight();
193         t.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
194         t.getCursor();
195         t.isCursorSet();
196         t.inside(1, 2);
197         t.contains(new Point(1, 2));
198         t.isFocusable();
199         t.setFocusable(true);
200         t.setFocusable(false);
201         t.transferFocus();
202         t.getFocusCycleRootAncestor();
203         t.nextFocus();
204         t.transferFocusUpCycle();
205         t.hasFocus();
206         t.isFocusOwner();
207         t.toString();
208         t.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
209         t.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
210         t.setComponentOrientation(ComponentOrientation.UNKNOWN);
211         t.getComponentOrientation();
212     }
213 }
214