Java 从JList中拖动对象,具有重影图像效果
我在java程序中的一个JLists中添加了拖放传输处理程序。 我在这个JList中添加了一个方法,以便对我正在拖动的选定值具有良好的重影效果。在我添加传输处理程序之前,此效果很好: 在这种情况下,此方法:Java 从JList中拖动对象,具有重影图像效果,java,swing,jlist,drag-and-drop,Java,Swing,Jlist,Drag And Drop,我在java程序中的一个JLists中添加了拖放传输处理程序。 我在这个JList中添加了一个方法,以便对我正在拖动的选定值具有良好的重影效果。在我添加传输处理程序之前,此效果很好: 在这种情况下,此方法: myList.addMouseMotionListener(new MouseAdapter() { public void mouseDragged(MouseEvent evt) { System.out.println("Dragging");
myList.addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent evt) {
System.out.println("Dragging");
}
});
发件人:
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.io.IOException;
import java.util.ArrayList;
import javax.activation.ActivationDataFlavor;
import javax.activation.DataHandler;
import javax.swing.*;
class ListExample extends JFrame
{
private JPanel topPanel;
private JList myList;
public ListExample()
{
setSize(300, 100 );
topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
String listData[] =
{
"Item 1",
"Item 2",
"Item 3",
"Item 4"
};
myList = new JList(listData);
myList.setDragEnabled(true);
ListItemTransferHandler handler = new ListItemTransferHandler();
myList.setTransferHandler(handler);
topPanel.add( myList, BorderLayout.CENTER );
myList.addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent evt) {
System.out.println("Dragging");
}
});
}
public static void main( String args[] )
{
ListExample mainFrame = new ListExample();
mainFrame.setVisible(true );
}
class ListItemTransferHandler extends TransferHandler {
private final DataFlavor localObjectFlavor;
private Object[] transferedObjects = null;
public ListItemTransferHandler() {
localObjectFlavor = new ActivationDataFlavor(Object[].class, DataFlavor.javaJVMLocalObjectMimeType, "Array of items");
}
private JList source = null;
@SuppressWarnings("deprecation")
@Override protected Transferable createTransferable(JComponent c) {
source = (JList) c;
transferedObjects = source.getSelectedValues();
return new DataHandler(transferedObjects, localObjectFlavor.getMimeType());
}
@Override public boolean canImport(TransferSupport info) {
return true;
}
@Override public int getSourceActions(JComponent c) {
return MOVE; //TransferHandler.COPY_OR_MOVE;
}
}
}
在我开始拖动时被调用一次或两次,但当我离开几个像素时,源选择将改变颜色,不再调用我的dragmouse侦听器,并且重影图像将保留在被拖动对象的源附近。
但是,我仍然可以拖动选定的单元格并将它们放到我想要的地方。只是鬼魂的形象并没有一路跟随。
我显然遗漏了一些重要的内容,但由于这是一个相当具体的问题,我在任何地方都找不到帮助,因此建议将不胜感激。DragGestureListener在启动拖放过程时优先于MouseMotionListener。你必须实现这样一个Draggesturelelistener。 请参见此处,了解一个良好的工作示例。
拖放过程启动时,DragGestureListener优先于MouseMotionListener。你必须实现这样一个Draggesturelelistener。 请参见此处,了解一个良好的工作示例。
为了更快地获得更好的帮助,请发布一个。这可能是操作系统的特定行为(幻影),但不是标准的Java功能。通常,要创建这样的效果,您必须进行大量额外的编码并投入一些精力…碰巧Windows不支持此功能,这就是为什么我想定制一个。为了更快获得更好的帮助,请发布一个。这可能是操作系统的特定行为(重影图像),但不是标准Java功能。通常要创建这样的效果,你必须做很多额外的编码,并投入一些精力…碰巧这个功能在Windows中不受支持,这就是为什么我想定制一个。