27
27
* @bug 8003400
28
28
* @summary Tests that JTree shows the last row
29
29
* @author Sergey Malenkov
30
- * @library /lib/client
31
- * @build ExtendedRobot
32
30
* @run main/othervm Test8003400
33
31
* @run main/othervm Test8003400 reverse
34
- * @run main/othervm Test8003400 system
35
- * @run main/othervm Test8003400 system reverse
36
32
*/
37
33
34
+ import java .awt .Component ;
35
+ import java .awt .event .InputEvent ;
36
+ import java .awt .Point ;
38
37
import java .awt .Rectangle ;
39
38
import java .awt .Robot ;
40
39
import java .awt .event .KeyEvent ;
@@ -53,59 +52,100 @@ public class Test8003400 {
53
52
private static final String TITLE = "Test JTree with a large model" ;
54
53
private static List <String > OBJECTS = Arrays .asList (TITLE , "x" , "y" , "z" );
55
54
private static JScrollPane pane ;
55
+ private static JFrame frame ;
56
+ private static JTree tree ;
57
+ private static Point point ;
58
+ private static Rectangle rect ;
59
+
60
+ public static void blockTillDisplayed (Component comp ) {
61
+ Point p = null ;
62
+ while (p == null ) {
63
+ try {
64
+ p = comp .getLocationOnScreen ();
65
+ } catch (IllegalStateException e ) {
66
+ try {
67
+ Thread .sleep (500 );
68
+ } catch (InterruptedException ie ) {
69
+ }
70
+ }
71
+ }
72
+ }
56
73
57
74
public static void main (String [] args ) throws Exception {
58
75
for (String arg : args ) {
59
76
if (arg .equals ("reverse" )) {
60
77
Collections .reverse (OBJECTS );
61
78
}
62
- if (arg .equals ("system" )) {
63
- UIManager .setLookAndFeel (UIManager .getSystemLookAndFeelClassName ());
64
- }
65
79
}
66
- SwingUtilities .invokeAndWait (new Runnable () {
67
- public void run () {
68
- DefaultMutableTreeNode root = new DefaultMutableTreeNode ();
80
+ UIManager .LookAndFeelInfo infos [] = UIManager .getInstalledLookAndFeels ();
81
+ for (UIManager .LookAndFeelInfo info : infos ) {
82
+ UIManager .setLookAndFeel (info .getClassName ());
83
+ System .out .println (info .getClassName ());
84
+ try {
85
+ SwingUtilities .invokeAndWait (new Runnable () {
86
+ public void run () {
87
+ DefaultMutableTreeNode root = new DefaultMutableTreeNode ();
69
88
70
- JTree tree = new JTree (root );
71
- tree .setLargeModel (true );
72
- tree .setRowHeight (16 );
89
+ tree = new JTree (root );
90
+ tree .setLargeModel (true );
91
+ tree .setRowHeight (16 );
73
92
74
- JFrame frame = new JFrame (TITLE );
75
- frame .add (pane = new JScrollPane (tree ));
76
- frame .setSize (200 , 100 );
77
- frame .setLocationRelativeTo (null );
78
- frame .setDefaultCloseOperation (JFrame .DISPOSE_ON_CLOSE );
79
- frame .setVisible (true );
93
+ frame = new JFrame (TITLE );
94
+ frame .add (pane = new JScrollPane (tree ));
95
+ frame .setSize (200 , 100 );
96
+ frame .setAlwaysOnTop (true );
97
+ frame .setLocationRelativeTo (null );
98
+ frame .setDefaultCloseOperation (JFrame .DISPOSE_ON_CLOSE );
99
+ frame .setVisible (true );
80
100
81
- for (String object : OBJECTS ) {
82
- root .add (new DefaultMutableTreeNode (object ));
83
- }
84
- tree .expandRow (0 );
85
- }
86
- });
101
+ for (String object : OBJECTS ) {
102
+ root .add (new DefaultMutableTreeNode (object ));
103
+ }
104
+ tree .expandRow (0 );
105
+ }
106
+ });
87
107
88
- ExtendedRobot robot = new ExtendedRobot ();
89
- robot .waitForIdle (500 );
90
- robot .keyPress (KeyEvent .VK_END );
91
- robot .waitForIdle (500 );
92
- robot .keyRelease (KeyEvent .VK_END );
93
- robot .waitForIdle ();
108
+ blockTillDisplayed (frame );
94
109
95
- SwingUtilities .invokeAndWait (new Runnable () {
96
- public void run () {
97
- JTree tree = (JTree ) pane .getViewport ().getView ();
98
- Rectangle inner = tree .getRowBounds (tree .getRowCount () - 1 );
99
- Rectangle outer = SwingUtilities .convertRectangle (tree , inner , pane );
100
- outer .y += tree .getRowHeight () - 1 - pane .getVerticalScrollBar ().getHeight ();
101
- // error reporting only for automatic testing
102
- if (null != System .getProperty ("test.src" , null )) {
103
- SwingUtilities .getWindowAncestor (pane ).dispose ();
104
- if (outer .y != 0 ) {
105
- throw new Error ("TEST FAILED: " + outer .y );
110
+ Robot robot = new Robot ();
111
+ robot .setAutoDelay (100 );
112
+ SwingUtilities .invokeAndWait (() -> {
113
+ point = tree .getLocationOnScreen ();
114
+ rect = tree .getBounds ();
115
+ });
116
+ robot .waitForIdle ();
117
+ robot .delay (500 );
118
+ robot .mouseMove (point .x + rect .width / 2 , point .y + rect .height / 3 );
119
+ robot .mousePress (InputEvent .BUTTON1_DOWN_MASK );
120
+ robot .mouseRelease (InputEvent .BUTTON1_DOWN_MASK );
121
+
122
+ robot .waitForIdle ();
123
+ robot .delay (1000 );
124
+ robot .keyPress (KeyEvent .VK_END );
125
+ robot .keyRelease (KeyEvent .VK_END );
126
+ robot .waitForIdle ();
127
+ robot .delay (1000 );
128
+
129
+ SwingUtilities .invokeAndWait (new Runnable () {
130
+ public void run () {
131
+ JTree tree = (JTree ) pane .getViewport ().getView ();
132
+ Rectangle inner = tree .getRowBounds (tree .getRowCount () - 1 );
133
+ Rectangle outer = SwingUtilities .convertRectangle (tree , inner , pane );
134
+ int heightDifference = outer .y + tree .getRowHeight () - pane .getVerticalScrollBar ().getHeight ();
135
+ // error reporting only for automatic testing
136
+ if (null != System .getProperty ("test.src" , null )) {
137
+ frame .dispose ();
138
+ if (heightDifference > 3 ) {
139
+ throw new Error ("TEST FAILED: " + heightDifference );
140
+ }
141
+ }
106
142
}
143
+ });
144
+ } finally {
145
+ if (frame != null ) {
146
+ SwingUtilities .invokeAndWait (frame ::dispose );
107
147
}
108
148
}
109
- });
149
+ }
110
150
}
111
151
}
0 commit comments