我目前正在嘗試在拖放過程中接收關鍵事件,但在我看來,重點在拖動時被帶走,因此我無法聽到任何重要事件。如何在拖放過程中接收重要事件?
我拖動了一個實現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