我需要一些帮助。是否有可能模拟拖动和放大器没有注册组件就丢弃了?
例如。我在窗口的任何地方单击鼠标键并按住鼠标键,此时,我想用Java编程创建或模拟DragSourceEvent
。
这可能吗?
更新
关于鲍勃的回复,至少我明白了,我可以创建一个用于拖拽的听众。下降:
DragSource dragSource = new DragSource();
DragGestureListener listener = new DragGestureListener() {
public void dragGestureRecognized(DragGestureEvent event) {
event.startDrag (null, strSel) ;
...
}
}
listener.dragGestureRecognized(new DragGestureEvent(
new DragGestureRecognizer(dragSource, component) {
}, DnDConstants.ACTION_COPY, new Point(0,0), events ));
但不幸的是我得到了这个例外:
java.lang.IllegalArgumentException异常: 来源的行动 java.awt.dnd.DragSourceContext中。(DragSourceContext.java:169) 在 java.awt.dnd.DragSource.createDragSourceContext(DragSource.java:454) 在 java.awt.dnd.DragSource.startDrag(DragSource.java:293) 在 java.awt.dnd.DragSource.startDrag(DragSource.java:403) 在 java.awt.dnd.DragGestureEvent.startDrag(DragGestureEvent.java:203)
有什么建议吗?
答案 0 :(得分:1)
您提出的问题: 我没有尝试过,但理论上你应该能够创建Event对象并从其中一个系统类获取Swing事件队列的句柄。但是,如果没有有效的组件,方法尝试使用该事件时可能会出现问题。
你可能意味着什么: 为标准窗口注册事件 - 您应该能够为空的JPanel或JFrame设置拖放支持,但这需要一些黑客攻击。拖拽当没有内置时,Drop在这个级别上工作很痛苦 - 我建议使用像隐形组件之类的东西。