【发布时间】:2017-03-16 10:53:30
【问题描述】:
我正在制作一个游戏,用户需要将 ImageView 拖到 GridPane 上,当他们拖动它时,我希望他们能够按下一个键来旋转 ImageView。我只希望他们能够在拖动时旋转 ImageView,因此我在拖动事件开始时设置 KeyEvent 处理程序,然后将其删除。
这是设置处理程序的代码:
private void setPlacementHandlers()
{
setOnMouseMoved(event -> trackMouse(event));
setOnDragDetected(event -> pickedUp(event));
setOnDragDone(event -> placed(event));
}
这是 OnDragDetected 的代码:
private void pickedUp(MouseEvent event)
{
//Get variables from Ship
ShipPart[] parts = ship.getParts();
int shipSize = ship.getSize();
Dragboard db = this.startDragAndDrop(TransferMode.MOVE);
ship.getBoard().setDraggedPart(this);
ClipboardContent cbContent = new ClipboardContent();
cbContent.putImage(this.getImage());
db.setDragView(shipImage);
db.setDragViewOffsetX((partIndex * 50) + mouseX);
db.setDragViewOffsetY(mouseY);
db.setContent(cbContent);
setFocusTraversable(true);
requestFocus();
setOnKeyPressed(keyEvent -> rotate(keyEvent, db, cbContent));
getScene().onKeyPressedProperty().bind(this.onKeyPressedProperty());
for(int i = 0; i < shipSize; i++)
parts[i].setVisible(false);
event.consume();
}
这是我用于测试目的的 OnKeyPressed 临时版本:
private void rotate(KeyEvent keyEvent, Dragboard db, ClipboardContent cbContent)
{
System.out.println("Potato");
}
我试过 setFocusTraversable(true);和 requestFocus();
出于调试的目的,我删除了在拖动完成后删除 KeyEvent 处理程序的代码,结果表明 KeyEvent 在 DragEvent 之后工作正常,但在拖动期间不能正常工作。
总而言之,问题似乎不在于 ImageView 没有获得 KeyEvent,它几乎似乎因为 DragEvent 而没有生成 KeyEvent。
感谢任何帮助。
更新:我还尝试将 KeyEvent 处理程序添加到另一个对象,然后将更改应用到我想要更改的对象,但这不起作用。我还尝试了线程和任务的各种组合。
【问题讨论】:
标签: java javafx event-handling