Name: rmT116609 Date: 04/10/2003
FULL PRODUCT VERSION :
java version "1.4.2-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b19)
Java HotSpot(TM) Client VM (build 1.4.2-beta-b19, mixed mode)
FULL OS VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
A DESCRIPTION OF THE PROBLEM :
General Drag and Drop conflicts with setUI
This is the same as bug 4760426 but applies to other Swing components as well (not just JTree). I have given the example of a JList where Drag and Drop along with updateComponentTreeUI cause a NullPointerException to be thrown when drag and drop is done.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Highlight the word four
drag it into the list
EXPECTED VERSUS ACTUAL BEHAVIOR :
the list now to show one, two, three, four
NullPointerException is thrown
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NullPointerException
at javax.swing.plaf.basic.BasicListUI.convertLocationToRow(BasicListUI.java:898)
at javax.swing.plaf.basic.BasicListUI.convertLocationToModel(BasicListUI.java:961)
at javax.swing.plaf.basic.BasicListUI.access$200(BasicListUI.java:34)
at javax.swing.plaf.basic.BasicListUI$ListDropTargetListener.updateInsertionLocation(BasicListUI.java:2240)
at javax.swing.plaf.basic.BasicDropTargetListener.dragOver(BasicDropTargetListener.java:230)
at javax.swing.TransferHandler$SwingDropTarget.dragOver(TransferHandler.java:574)
at sun.awt.dnd.SunDropTargetContextPeer.processMotionMessage(SunDropTargetContextPeer.java:475)
at sun.awt.dnd.SunDropTargetContextPeer.access$600(SunDropTargetContextPeer.java:52)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchMotionEvent(SunDropTargetContextPeer.java:780)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:737)
at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)
at java.awt.Component.dispatchEventImpl(Component.java:3493)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3476)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:3269)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3123)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3476)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
final DefaultListModel model = new DefaultListModel();
model.addElement("one");
model.addElement("two");
model.addElement("three");
JList list = new JList(model);
list.setTransferHandler(new TransferHandler() {
public boolean canImport(JComponent aComponent, DataFlavor[] aDataFlavorsArray) {
for (int i = 0; i < aDataFlavorsArray.length; i++) {
if (aDataFlavorsArray[i] == DataFlavor.stringFlavor) {
return true;
}
}
return false;
}
public boolean importData(JComponent aComponent, Transferable aTransferable) {
try {
model.addElement(aTransferable.getTransferData(DataFlavor.stringFlavor));
return true;
}
catch (IOException ex) {
}
catch (UnsupportedFlavorException ex) {
}
return false;
}
});
contentPane.add(new JScrollPane(list), BorderLayout.CENTER);
JTextField field = new JTextField("four");
field.setDragEnabled(true);
contentPane.add(field, BorderLayout.NORTH);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SwingUtilities.updateComponentTreeUI(frame);
frame.setVisible(true);
}
}
---------- END SOURCE ----------
(Review ID: 183787)
======================================================================