--- a/jdk/src/share/classes/javax/swing/JTable.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/javax/swing/JTable.java Tue Nov 08 15:37:37 2011 -0800
@@ -1828,6 +1828,8 @@
* table. While the {@code autoCreateRowSorter} property remains
* {@code true}, every time the model is changed, a new {@code
* TableRowSorter} is created and set as the table's row sorter.
+ * The default value for the {@code autoCreateRowSorter}
+ * property is {@code false}.
*
* @param autoCreateRowSorter whether or not a {@code RowSorter}
* should be automatically created
--- a/jdk/src/share/classes/javax/swing/JTree.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/javax/swing/JTree.java Tue Nov 08 15:37:37 2011 -0800
@@ -1838,7 +1838,9 @@
* nodes, or <code>null</code> if nothing is currently selected
*/
public TreePath[] getSelectionPaths() {
- return getSelectionModel().getSelectionPaths();
+ TreePath[] selectionPaths = getSelectionModel().getSelectionPaths();
+
+ return (selectionPaths != null && selectionPaths.length > 0) ? selectionPaths : null;
}
/**
--- a/jdk/src/share/classes/javax/swing/text/DefaultCaret.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/javax/swing/text/DefaultCaret.java Tue Nov 08 15:37:37 2011 -0800
@@ -1326,7 +1326,7 @@
if ( ! SwingUtilities2.canCurrentEventAccessSystemClipboard() ) {
return;
}
- if (this.dot != this.mark && component != null) {
+ if (this.dot != this.mark && component != null && component.hasFocus()) {
Clipboard clip = getSystemSelection();
if (clip != null) {
String selectedText;
--- a/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java Tue Nov 08 15:37:37 2011 -0800
@@ -1181,7 +1181,12 @@
public void insertAfterStart(Element elem, String htmlText) throws
BadLocationException, IOException {
verifyParser();
- if (elem != null && elem.isLeaf()) {
+
+ if (elem == null || htmlText == null) {
+ return;
+ }
+
+ if (elem.isLeaf()) {
throw new IllegalArgumentException
("Can not insert HTML after start of a leaf");
}
--- a/jdk/src/share/classes/sun/awt/image/OffScreenImageSource.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/sun/awt/image/OffScreenImageSource.java Tue Nov 08 15:37:37 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2011, 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
@@ -185,7 +185,7 @@
theConsumer.setDimensions(image.getWidth(), image.getHeight());
theConsumer.setProperties(properties);
sendPixels();
- theConsumer.imageComplete(ImageConsumer.SINGLEFRAMEDONE);
+ theConsumer.imageComplete(ImageConsumer.STATICIMAGEDONE);
} catch (NullPointerException e) {
if (theConsumer != null) {
theConsumer.imageComplete(ImageConsumer.IMAGEERROR);
--- a/jdk/src/share/classes/sun/swing/SwingUtilities2.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/classes/sun/swing/SwingUtilities2.java Tue Nov 08 15:37:37 2011 -0800
@@ -524,56 +524,67 @@
}
// If we get here we're not printing
- AATextInfo info = drawTextAntialiased(c);
- if (info != null && (g instanceof Graphics2D)) {
+ if (g instanceof Graphics2D) {
+ AATextInfo info = drawTextAntialiased(c);
Graphics2D g2 = (Graphics2D)g;
- Object oldContrast = null;
- Object oldAAValue = g2.getRenderingHint(KEY_TEXT_ANTIALIASING);
- if (info.aaHint != oldAAValue) {
- g2.setRenderingHint(KEY_TEXT_ANTIALIASING, info.aaHint);
- } else {
- oldAAValue = null;
- }
- if (info.lcdContrastHint != null) {
- oldContrast = g2.getRenderingHint(KEY_TEXT_LCD_CONTRAST);
- if (info.lcdContrastHint.equals(oldContrast)) {
- oldContrast = null;
- } else {
- g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST,
- info.lcdContrastHint);
- }
- }
-
boolean needsTextLayout = ((c != null) &&
(c.getClientProperty(TextAttribute.NUMERIC_SHAPING) != null));
+
if (needsTextLayout) {
synchronized(charsBufferLock) {
int length = syncCharsBuffer(text);
needsTextLayout = isComplexLayout(charsBuffer, 0, length);
}
}
- if (needsTextLayout) {
+
+ if (info != null) {
+ Object oldContrast = null;
+ Object oldAAValue = g2.getRenderingHint(KEY_TEXT_ANTIALIASING);
+ if (info.aaHint != oldAAValue) {
+ g2.setRenderingHint(KEY_TEXT_ANTIALIASING, info.aaHint);
+ } else {
+ oldAAValue = null;
+ }
+ if (info.lcdContrastHint != null) {
+ oldContrast = g2.getRenderingHint(KEY_TEXT_LCD_CONTRAST);
+ if (info.lcdContrastHint.equals(oldContrast)) {
+ oldContrast = null;
+ } else {
+ g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST,
+ info.lcdContrastHint);
+ }
+ }
+
+ if (needsTextLayout) {
+ TextLayout layout = createTextLayout(c, text, g2.getFont(),
+ g2.getFontRenderContext());
+ layout.draw(g2, x, y);
+ } else {
+ g.drawString(text, x, y);
+ }
+
+ if (oldAAValue != null) {
+ g2.setRenderingHint(KEY_TEXT_ANTIALIASING, oldAAValue);
+ }
+ if (oldContrast != null) {
+ g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, oldContrast);
+ }
+
+ return;
+ }
+
+ if (needsTextLayout){
TextLayout layout = createTextLayout(c, text, g2.getFont(),
g2.getFontRenderContext());
layout.draw(g2, x, y);
- } else {
- g.drawString(text, x, y);
- }
-
- if (oldAAValue != null) {
- g2.setRenderingHint(KEY_TEXT_ANTIALIASING, oldAAValue);
- }
- if (oldContrast != null) {
- g2.setRenderingHint(KEY_TEXT_LCD_CONTRAST, oldContrast);
+ return;
}
}
- else {
- g.drawString(text, x, y);
- }
+
+ g.drawString(text, x, y);
}
-
/**
* Draws the string at the specified location underlining the specified
* character.
--- a/jdk/src/share/demo/jfc/TransparentRuler/README.txt Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/share/demo/jfc/TransparentRuler/README.txt Tue Nov 08 15:37:37 2011 -0800
@@ -1,14 +1,10 @@
To run the Ruler demo:
- java -jar Ruler.jar
+ java -jar TransparentRuler.jar
These instructions assume that this installation's version of the java
command is in your path. If it isn't, then you should either
specify the complete path to the java command or update your
PATH environment variable as described in the installation
instructions for the Java(TM) SE Development Kit.
-
-KNOWN ISSUES:
-Context menu is clipped with the window shape. The issues are:
-CR 7027486 JPopupMenu doesn't take window shape into account
--- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Tue Nov 08 15:37:37 2011 -0800
@@ -466,12 +466,16 @@
if (true) {
switch(e.getID()) {
case PaintEvent.UPDATE:
- log.finer("XCP coalescePaintEvent : UPDATE : add : x = " +
+ if (log.isLoggable(PlatformLogger.FINER)) {
+ log.finer("XCP coalescePaintEvent : UPDATE : add : x = " +
r.x + ", y = " + r.y + ", width = " + r.width + ",height = " + r.height);
+ }
return;
case PaintEvent.PAINT:
- log.finer("XCP coalescePaintEvent : PAINT : add : x = " +
+ if (log.isLoggable(PlatformLogger.FINER)) {
+ log.finer("XCP coalescePaintEvent : PAINT : add : x = " +
r.x + ", y = " + r.y + ", width = " + r.width + ",height = " + r.height);
+ }
return;
}
}
@@ -1248,7 +1252,9 @@
* ButtonPress, ButtonRelease, KeyPress, KeyRelease, EnterNotify, LeaveNotify, MotionNotify
*/
protected boolean isEventDisabled(XEvent e) {
- enableLog.finest("Component is {1}, checking for disabled event {0}", e, (isEnabled()?"enabled":"disable"));
+ if (enableLog.isLoggable(PlatformLogger.FINEST)) {
+ enableLog.finest("Component is {1}, checking for disabled event {0}", e, (isEnabled()?"enabled":"disable"));
+ }
if (!isEnabled()) {
switch (e.get_type()) {
case XConstants.ButtonPress:
@@ -1258,7 +1264,9 @@
case XConstants.EnterNotify:
case XConstants.LeaveNotify:
case XConstants.MotionNotify:
- enableLog.finer("Event {0} is disable", e);
+ if (enableLog.isLoggable(PlatformLogger.FINER)) {
+ enableLog.finer("Event {0} is disable", e);
+ }
return true;
}
}
--- a/jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Tue Nov 08 15:37:37 2011 -0800
@@ -678,7 +678,7 @@
public void writeToString(StructType stp, PrintWriter pw) {
int type;
pw.println("\n\n\tString getName() {\n\t\treturn \"" + stp.getName()+ "\"; \n\t}");
- pw.println("\n\n\tString getFieldsAsString() {\n\t\tString ret=\"\";\n");
+ pw.println("\n\n\tString getFieldsAsString() {\n\t\tStringBuilder ret = new StringBuilder(" + stp.getNumFields() * 40 + ");\n");
for (Enumeration e = stp.getMembers() ; e.hasMoreElements() ;) {
AtomicType tp = (AtomicType) e.nextElement();
@@ -688,24 +688,24 @@
if ((name != null) && (name.length() > 0))
{
if (type == AtomicType.TYPE_ATOM) {
- pw.println("\t\tret += \"\"+\"" + name + " = \" + XAtom.get(get_" + name + "()) +\", \";");
+ pw.println("\t\tret.append(\"" + name + " = \" ).append( XAtom.get(get_" + name + "()) ).append(\", \");");
} else if (name.equals("type")) {
- pw.println("\t\tret += \"\"+\"type = \" + XlibWrapper.eventToString[get_type()] +\", \";");
+ pw.println("\t\tret.append(\"type = \").append( XlibWrapper.eventToString[get_type()] ).append(\", \");");
} else if (name.equals("window")){
- pw.println("\t\tret += \"\"+\"window = \" + getWindow(get_window()) + \", \";");
+ pw.println("\t\tret.append(\"window = \" ).append( getWindow(get_window()) ).append(\", \");");
} else if (type == AtomicType.TYPE_ARRAY) {
- pw.print("\t\tret += \"{\"");
+ pw.print("\t\tret.append(\"{\")");
for (int i = 0; i < tp.getArrayLength(); i++) {
- pw.print(" + get_" + name + "(" + i + ") + \" \"");
+ pw.print("\n\t\t.append( get_" + name + "(" + i + ") ).append(\" \")");
}
- pw.println(" + \"}\";");
+ pw.println(".append( \"}\");");
} else {
- pw.println("\t\tret += \"\"+\"" + name +" = \" + get_"+ name+"() +\", \";");
+ pw.println("\t\tret.append(\"" + name +" = \").append( get_"+ name+"() ).append(\", \");");
}
}
}
- pw.println("\t\treturn ret;\n\t}\n\n");
+ pw.println("\t\treturn ret.toString();\n\t}\n\n");
}
public void writeStubs(StructType stp, PrintWriter pw) {
--- a/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_config.h Sat Nov 05 14:27:47 2011 -0700
+++ b/jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_config.h Tue Nov 08 15:37:37 2011 -0800
@@ -32,7 +32,7 @@
#include <X11/Xutil.h>
#include <X11/extensions/shape.h>
#include <sys/types.h>
-#include <sys/unistd.h>
+#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <inttypes.h>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java Tue Nov 08 15:37:37 2011 -0800
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2007, 2011, 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 4492274
+ * @summary Tests if JEditorPane.getPage() correctly returns anchor reference.
+ * @author Denis Sharypov
+ */
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.text.html.HTMLEditorKit;
+import java.awt.*;
+import java.io.File;
+import java.net.URL;
+
+public class bug4492274 {
+
+ private static URL page;
+
+ private static JEditorPane jep;
+
+ public static void main(String args[]) throws Exception {
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ page = new URL(page, "#linkname");
+ jep.setPage(page);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+
+ toolkit.realSync();
+
+ if (getPageAnchor() == null) {
+ throw new RuntimeException("JEditorPane.getPage() returns null anchor reference");
+ }
+
+ }
+
+ private static String getPageAnchor() throws Exception {
+ final String[] result = new String[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ result[0] = jep.getPage().getRef();
+ }
+ });
+
+ return result[0];
+ }
+
+ private static void createAndShowGUI() {
+ try {
+ File file = new File(System.getProperty("test.src", "."), "test.html");
+ page = file.toURI().toURL();
+
+ JFrame f = new JFrame();
+
+ jep = new JEditorPane();
+ jep.setEditorKit(new HTMLEditorKit());
+ jep.setEditable(false);
+ jep.setPage(page);
+
+ JScrollPane sp = new JScrollPane(jep);
+
+ f.getContentPane().add(sp);
+ f.setSize(500, 500);
+ f.setVisible(true);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JEditorPane/4492274/test.html Tue Nov 08 15:37:37 2011 -0800
@@ -0,0 +1,7 @@
+<html>
+<body>
+<a name="top">top</a>
+<img src=a.jpg width=500 height=1000>
+<a name="linkname">bottom</a>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JSlider/6348946/bug6348946.java Tue Nov 08 15:37:37 2011 -0800
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2007, 2011, 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 6348946
+ * @summary Tests that JSlider's thumb moves in the right direction
+ * when it is used as a JTable cell editor.
+ * @author Mikhail Lapshin
+*/
+
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.event.InputEvent;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.*;
+
+public class bug6348946 {
+
+ private static JFrame frame;
+
+ private static JPanel panel;
+
+ private static volatile boolean passed = false;
+
+ public static void main(String[] args) throws Exception {
+ String lf = "javax.swing.plaf.metal.MetalLookAndFeel";
+ UIManager.setLookAndFeel(lf);
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ try {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ setupUI();
+ }
+ });
+ toolkit.realSync();
+ clickOnSlider();
+ toolkit.realSync();
+ checkResult();
+ } finally {
+ stopEDT();
+ }
+ }
+
+ private static void setupUI() {
+ frame = new JFrame();
+
+ panel = new JPanel();
+ panel.setLayout(new BorderLayout());
+ panel.add(new ParameterTable(), BorderLayout.CENTER);
+ frame.getContentPane().add(panel);
+
+ frame.pack();
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ }
+
+ private static void clickOnSlider() throws Exception {
+ Robot robot = new Robot();
+ robot.setAutoDelay(10);
+
+ Rectangle rect = getPanelRectangle();
+
+ double clickX = rect.getX() + rect.getWidth() / 4;
+ double clickY = rect.getY() + rect.getHeight() / 2;
+ robot.mouseMove((int) clickX, (int) clickY);
+
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ }
+
+ private static void checkResult(){
+ if (passed) {
+ System.out.println("Test passed");
+ } else {
+ throw new RuntimeException("The thumb moved " +
+ "to the right instead of the left!");
+ }
+ }
+
+ private static void stopEDT() {
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ frame.dispose();
+ }
+ });
+ }
+
+ private static class ParameterTable extends JTable {
+ public ParameterTable() {
+ super(new Object[][]{{5}}, new String[]{"Value"});
+ getColumnModel().getColumn(0).setCellRenderer(new Renderer());
+ getColumnModel().getColumn(0).setCellEditor(new Editor());
+ }
+ }
+
+ private static class Renderer implements TableCellRenderer {
+ private JSlider slider = new JSlider(0, 10);
+
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row, int col) {
+ int val = (Integer) value;
+ slider.setValue(val);
+ return slider;
+ }
+ }
+
+ private static class Editor extends AbstractCellEditor implements TableCellEditor {
+ private JSlider slider = new JSlider(0, 10);
+
+ public Component getTableCellEditorComponent(JTable table, Object value,
+ boolean isSelected,
+ int row, int col) {
+ int val = (Integer) value;
+ slider.setValue(val);
+ return slider;
+ }
+
+ public Editor() {
+ slider.addChangeListener(new ChangeListener() {
+ public void stateChanged(ChangeEvent e) {
+ if (!slider.getValueIsAdjusting()) {
+ passed = slider.getValue() <= 5;
+ }
+ }
+ });
+ }
+
+ public Object getCellEditorValue() {
+ return slider.getValue();
+ }
+ }
+
+ private static Rectangle getPanelRectangle() throws Exception{
+ final Rectangle[] result = new Rectangle[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ result[0] = new Rectangle(panel.getLocationOnScreen(), panel.getSize());
+ }
+ });
+
+ return result[0];
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTextArea/7049024/bug7049024.java Tue Nov 08 15:37:37 2011 -0800
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2011 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.
+ */
+
+/*
+ * Portions Copyright (c) 2011 IBM Corporation
+ */
+
+/* @test
+ * @bug 7049024
+ * @summary DnD fails with JTextArea and JTextField
+ * @author Sean Chou
+ */
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.text.DefaultCaret;
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+
+public class bug7049024 {
+ public static Clipboard clipboard = null;
+
+ public static JTextField textField = null;
+
+ // This button is used to move focus away from textField.
+ public static JButton button = null;
+
+ public static JFrame frame = null;
+
+ public static DefaultCaret caret = null;
+
+ public static void main(String[] args) throws Exception {
+
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ frame = new JFrame("Test");
+ textField = new JTextField("test selection for textfield");
+ button = new JButton("To compete the focus");
+
+ frame.setLayout(new FlowLayout());
+ frame.getContentPane().add(textField);
+ frame.getContentPane().add(button);
+
+ frame.pack();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setVisible(true);
+ }
+ });
+ toolkit.realSync();
+
+ clipboard = textField.getToolkit().getSystemSelection();
+ if (null == clipboard) {
+ return;
+ }
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ textField.requestFocusInWindow();
+ }
+ });
+ toolkit.realSync();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ caret = (DefaultCaret) textField.getCaret();
+ caret.setDot(2);
+ caret.moveDot(4);
+ }
+ });
+ toolkit.realSync();
+
+ String oldSelection = (String) clipboard.getData(DataFlavor.stringFlavor);
+ System.out.println("oldSelection is " + oldSelection);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ button.requestFocusInWindow();
+ }
+ });
+ toolkit.realSync(); // So JTextField loses the focus.
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ caret.setDot(4);
+ caret.moveDot(6);
+ }
+ });
+ toolkit.realSync();
+
+ String newSelection = (String) clipboard.getData(DataFlavor.stringFlavor);
+ System.out.println("newSelection is " + newSelection);
+
+ boolean passed = newSelection.equals(oldSelection);
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ frame.dispose();
+ }
+ });
+
+ if (!passed) {
+ throw new RuntimeException("The test for bug 7049024 failed");
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/ToolTipManager/Test6256140.java Tue Nov 08 15:37:37 2011 -0800
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2007, 2011, 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 6256140
+ * @summary Esc key doesn't restore old value in JFormattedtextField when ToolTip is set
+ * @author Alexander Potochkin
+ * @run main Test6256140
+ */
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class Test6256140 {
+
+ private static volatile JFormattedTextField ft;
+
+ private final static String initialText = "value";
+ private final static JLabel toolTipLabel = new JLabel("tip");
+
+ public static void main(String[] args) throws Exception {
+
+ Robot robot = new Robot();
+ robot.setAutoDelay(10);
+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ createAndShowGUI();
+ }
+ });
+ toolkit.realSync();
+
+ Point point = ft.getLocationOnScreen();
+ robot.mouseMove(point.x, point.y);
+ robot.mouseMove(point.x + 3, point.y + 3);
+
+ robot.keyPress(KeyEvent.VK_A);
+ robot.keyRelease(KeyEvent.VK_A);
+ toolkit.realSync();
+
+ if (!isTooltipShowning()) {
+ throw new RuntimeException("Tooltip is not shown");
+ }
+
+ robot.keyPress(KeyEvent.VK_ESCAPE);
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
+ toolkit.realSync();
+
+ if (isTooltipShowning()) {
+ throw new RuntimeException("Tooltip must be hidden now");
+ }
+
+ if (isTextEqual()) {
+ throw new RuntimeException("FormattedTextField must *not* cancel the updated value this time");
+ }
+
+ robot.keyPress(KeyEvent.VK_ESCAPE);
+ robot.keyRelease(KeyEvent.VK_ESCAPE);
+ toolkit.realSync();
+
+ if (!isTextEqual()) {
+ throw new RuntimeException("FormattedTextField must cancel the updated value");
+ }
+ }
+
+ private static boolean isTooltipShowning() throws Exception {
+ final boolean[] result = new boolean[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ result[0] = toolTipLabel.isShowing();
+ }
+ });
+
+ return result[0];
+ }
+
+ private static boolean isTextEqual() throws Exception {
+ final boolean[] result = new boolean[1];
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ result[0] = initialText.equals(ft.getText());
+ }
+ });
+
+ return result[0];
+ }
+
+ private static void createAndShowGUI() {
+ ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
+ ToolTipManager.sharedInstance().setInitialDelay(0);
+
+ final JFrame frame = new JFrame();
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setLayout(new FlowLayout());
+
+ ft = new JFormattedTextField() {
+
+ public JToolTip createToolTip() {
+ JToolTip toolTip = super.createToolTip();
+ toolTip.setLayout(new BorderLayout());
+ toolTip.add(toolTipLabel);
+ return toolTip;
+ }
+ };
+ ft.setToolTipText(" ");
+ ft.setValue(initialText);
+ frame.add(ft);
+
+ frame.pack();
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ ft.requestFocus();
+ }
+}