7149090: Nimbus:BorderFactory.createTitledBorder() the DEFAULT position of a title is not the same as the TOP
Reviewed-by: alexp
--- a/jdk/src/share/classes/javax/swing/BorderFactory.java Fri Apr 13 20:31:47 2012 +0400
+++ b/jdk/src/share/classes/javax/swing/BorderFactory.java Sun Apr 15 12:58:12 2012 +0300
@@ -371,7 +371,7 @@
/**
* Creates a new titled border with the specified title,
* the default border type (determined by the current look and feel),
- * the default text position (sitting on the top line),
+ * the default text position (determined by the current look and feel),
* the default justification (leading), and the default
* font and text color (determined by the current look and feel).
*
@@ -385,7 +385,7 @@
/**
* Creates a new titled border with an empty title,
* the specified border object,
- * the default text position (sitting on the top line),
+ * the default text position (determined by the current look and feel),
* the default justification (leading), and the default
* font and text color (determined by the current look and feel).
*
@@ -400,7 +400,7 @@
/**
* Adds a title to an existing border,
- * with default positioning (sitting on the top line),
+ * with default positioning (determined by the current look and feel),
* default justification (leading) and the default
* font and text color (determined by the current look and feel).
*
@@ -439,7 +439,8 @@
*<li><code>TitledBorder.ABOVE_BOTTOM</code>
*<li><code>TitledBorder.BOTTOM</code> (sitting on the bottom line)
*<li><code>TitledBorder.BELOW_BOTTOM</code>
- *<li><code>TitledBorder.DEFAULT_POSITION</code> (top)
+ *<li><code>TitledBorder.DEFAULT_POSITION</code> (the title position
+ * is determined by the current look and feel)
*</ul>
* @return the <code>TitledBorder</code> object
*/
@@ -477,7 +478,8 @@
*<li><code>TitledBorder.ABOVE_BOTTOM</code>
*<li><code>TitledBorder.BOTTOM</code> (sitting on the bottom line)
*<li><code>TitledBorder.BELOW_BOTTOM</code>
- *<li><code>TitledBorder.DEFAULT_POSITION</code> (top)
+ *<li><code>TitledBorder.DEFAULT_POSITION</code> (the title position
+ * is determined by the current look and feel)
*</ul>
* @param titleFont a Font object specifying the title font
* @return the TitledBorder object
@@ -516,7 +518,8 @@
*<li><code>TitledBorder.ABOVE_BOTTOM</code>
*<li><code>TitledBorder.BOTTOM</code> (sitting on the bottom line)
*<li><code>TitledBorder.BELOW_BOTTOM</code>
- *<li><code>TitledBorder.DEFAULT_POSITION</code> (top)
+ *<li><code>TitledBorder.DEFAULT_POSITION</code> (the title position
+ * is determined by the current look and feel)
*</ul>
* @param titleFont a <code>Font</code> object specifying the title font
* @param titleColor a <code>Color</code> object specifying the title color
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/border/Test7149090.java Sun Apr 15 12:58:12 2012 +0300
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2012, 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.
+ */
+
+/* @test
+ @bug 7149090
+ @summary Nimbus:BorderFactory.createTitledBorder() the DEFAULT position of a title is not the same as the TOP
+ @author Pavel Porvatov
+*/
+
+import javax.swing.*;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.TitledBorder;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test7149090 {
+ private static final Object[][] DEFAULT_TITLE_POSITIONS = {
+ {"Metal", TitledBorder.TOP},
+ {"Motif", TitledBorder.TOP},
+ {"Windows", TitledBorder.TOP},
+ {"Nimbus", TitledBorder.ABOVE_TOP},
+ };
+
+ public static void main(String[] args) throws Exception {
+ for (UIManager.LookAndFeelInfo lookAndFeel : UIManager.getInstalledLookAndFeels()) {
+ for (Object[] defaultTitlePosition : DEFAULT_TITLE_POSITIONS) {
+ if (defaultTitlePosition[0].equals(lookAndFeel.getName())) {
+ UIManager.setLookAndFeel(lookAndFeel.getClassName());
+
+ final int expectedPosition = (Integer) defaultTitlePosition[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ List<TitledBorder> borders = new ArrayList<>();
+
+ borders.add(BorderFactory.createTitledBorder(new EmptyBorder(0, 0, 0, 0), "Title"));
+
+ try {
+ Method getPositionMethod = TitledBorder.class.getDeclaredMethod("getPosition");
+
+ getPositionMethod.setAccessible(true);
+
+ for (TitledBorder border : borders) {
+ int position = (Integer) getPositionMethod.invoke(border);
+
+ if (position != expectedPosition) {
+ throw new RuntimeException("Invalid title position");
+ }
+ }
+ } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ System.out.println("Test passed for LookAndFeel " + lookAndFeel.getName());
+ }
+ }
+ }
+ }
+}