【发布时间】:2017-11-05 22:05:34
【问题描述】:
我有ArrayList<ImageView> imageViews = new ArrayList<>();,所以它包含图像。
图像在按钮单击时创建,保存到该阵列并出现在该阵列的场景中。代码有点乱,不过嘿嘿,一开始是#makeItWork #makeItRight 后来...
public void btnAddAndAction() throws FileNotFoundException {
algorithm.addElement(algorithm.calculateId(),"AND",null);
imageViews.add(new ImageView(algorithm.getLastElementImg()));
imageViews.get(imageViews.size()-1).setX(25); //default pos
imageViews.get(imageViews.size()-1).setY(85);
pane.getChildren().add( imageViews.get(imageViews.size()-1));
pane.requestLayout();
imageViews.get(imageViews.size()-1).setOnMousePressed(imgOnMousePressedEventHandler);
imageViews.get(imageViews.size()-1).setOnMouseDragged(imgOnMouseDraggedEventHandler);
}
//FIXME
EventHandler<MouseEvent> imgOnMousePressedEventHandler =
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
orgSceneX = t.getSceneX();
orgSceneY = t.getSceneY();
orgTranslateX = ((imageViews.get(imageViews.size()-1)).getTranslateX());
orgTranslateY = ((imageViews.get(imageViews.size()-1)).getTranslateY());
}
};
//FIXME
EventHandler<MouseEvent> imgOnMouseDraggedEventHandler =
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
double offsetX = t.getSceneX() - orgSceneX;
double offsetY = t.getSceneY() - orgSceneY;
double newTranslateX = orgTranslateX + offsetX;
double newTranslateY = orgTranslateY + offsetY;
(imageViews.get(imageViews.size()-1)).setTranslateX(newTranslateX);
(imageViews.get(imageViews.size()-1)).setTranslateY(newTranslateY);
}
};
我正在尝试对图像进行拖放功能,但我正在努力检测鼠标下方的内容...
我从MouseEvent 找到了getSource,但它需要对象...
所以:我怎么知道,数组的哪个元素被按下以便我可以拖动它??
Java 1.8、JavaFX、IntelliJ。
【问题讨论】:
-
为每个图像创建不同的处理程序
-
另外我不太确定使用
getSource()有什么问题...你是什么意思“它需要对象”? -
我的意思是我需要将对象传递给它,而不是 ImageView...顺便说一句,关于每个图像的不同处理程序:你的意思是把它也放在列表或某种数组中,并有一个单独的用于图像列表中的每个元素?只是为了确保它......听起来它可能会让它工作,因为现在它总是移动列表的最后一个元素,即使我试图拖动另一张图片。
-
一个
ImageView是一个Object。如果EventHandler被添加到ImageView中,那么MouseEvent的来源在由EventHandler处理时是ImageView。只需转换getSource()的结果即可。 -
哦,cast,对...现在可以正常使用了,谢谢!!
标签: java intellij-idea javafx drag-and-drop mouseevent