我目前正在尝试在拖放过程中接收关键事件,但在我看来,重点在拖动时被带走,因此我无法听到任何重要事件。如何在拖放过程中接收重要事件?
我拖动了一个实现KeyListener的JComponent子类,并请求DragSourceListener的dragEnter方法中的焦点,但我的假设是焦点在之后被带走。现在
,谁拥有的焦点,我怎么能拿走它回到我的JComponent。还是有一种更适合dnd的方法?
预先感谢您。
UPDATE:
这是一个很大的必要做这个工作,所以我只打算张贴一些片段告诉你什么是我想要做的代码:
public class Stone extends JComponent implements Serializable, KeyListener {
public Stone(...) {
//...
setFocusable(true);
addKeyListener(this);
this.dragSource = DragSource.getDefaultDragSource();
this.dgListener = new StoneDGListener();
this.dsListener = new StoneDSListener();
this.dragSource.createDefaultDragGestureRecognizer(
this,
DnDConstants.ACTION_MOVE,
this.dgListener
);
//...
}
//...
public void keyPressed(KeyEvent e) {
System.out.println("Stone: "+e.getKeyCode());
}
//...
public class StoneDSListener implements DragSourceListener, Serializable {
//...
@Override
public void dragEnter(DragSourceDragEvent dsde) {
//...
Stone.this.requestFocus();
addKeyListener(Stone.this);
}
//...
}
}
会发生的是,在我拖动Stone
组件之前,我的JPanel具有焦点,因此它可以接收我按下的任何键。 在拖我可以不听任何按键(所以我不知道谁拥有焦点),即使我要求它dragEnter()
后,我当释放Stone
任意键事件发送到Stone
。
这可能不是问题很重要,但要说明我在做什么这里是截图:
image showing the "drag" http://img685.imageshack.us/img685/1884/pico.png (在这里,我从集合拖动Stone
下面的比赛场的顶部)。在这种状态下,我不知道如何找出按键。我需要弄清楚这一点,以便能够旋转Stone
。
是否可以放置您正在使用的代码?你在使用任何IDE吗? – medopal 2009-12-20 15:13:08
我试图放入尽可能多的代码,因为我认为这会有所帮助。我不认为它有什么区别,但我没有任何插件使用Eclipse Ganymede。顺便说一句。这不是一个小程序,而是一个标准的桌面应用程序。 – 2009-12-22 00:09:09