嗨,我有问题的大量类似的拖放事件的图像,我移动标签到其他图像视图。
代码示例:
//drag and drope for imageview01
@FXML
private void handleDragDetected1(MouseEvent event) {
Dragboard db = imageview01.startDragAndDrop(TransferMode.ANY);
ClipboardContent cb = new ClipboardContent();
cb.putImage(imageview01.getImage());
cb.putString(imageview01_label.getText());
db.setContent(cb);
System.out.println("Picture 1 is draged");
}
...
...
//drag and drope for imageview100
@FXML
private void handleDragDetected100(MouseEvent event) {
...
...
}有没有缩短代码的解决方案?
发布于 2017-02-28 01:20:55
您可以将Label指定为相应ImageView的userData,这允许您使用事件源来检索Label,从而允许您对所有ImageView使用相同的事件处理程序。
为简单起见,下面的示例使用了Button和onMouseClicked事件,但同样的方法也适用于您的问题:
FXML
<Label text="Hello World" fx:id="label1"/>
<Button text="Print Label 1" onMouseClicked="#click" userData="$label1"/>控制器
@FXML
private void click(MouseEvent event) {
// retrieve the node the event occured on
Button btn = (Button) event.getSource();
// retrieve Label associated with event source
Label label = (Label) btn.getUserData();
// now we've got all info we need without using any field of the controller
System.out.println(label.getText());
}(您甚至不需要控制器中的label1字段。)
https://stackoverflow.com/questions/42482003
复制相似问题