1
我想連接2個形狀與線,而鼠標按下。 由於文檔說我不能使用按下拖動釋放模型來做到這一點,所以應該使用拖放方法 - 一切看起來都不錯,但是如何禁用默認圖標,該圖標表示允許拖放內容放置目標?在mouseMove上畫線,我不想要這些默認圖標。javafx拖放默認圖標
我包括簡單的程序顯示它 - 只要運行我嘗試拖一圈到其他。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package onreleased;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.*;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
/**
*
* @author mmk
*/
public class DaDIcons extends Application {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
final Label label = new Label("started");
label.setLayoutY(100);
Pane pane = new Pane();
Circle red = createCircle(40, 40, 30, Color.RED, label);
Circle blue = createCircle(160, 40, 30, Color.BLUE, label);
pane.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
System.out.println("foo");
}
});
pane.getChildren().addAll(red, blue, label);
primaryStage.setScene(new Scene(pane, 300, 250));
primaryStage.show();
}
private Circle createCircle(double x, double y, double r, final Color color, final Label statusLabel) {
final Circle circle = new Circle(x, y, r);
circle.setFill(color);
circle.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
statusLabel.setText(color.toString() + " over");
System.out.println("foo");
if (event.getGestureSource() != circle) {
event.acceptTransferModes(TransferMode.ANY);
}
}
});
circle.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent arg0) {
statusLabel.setText(color.toString() + " dropped");
}
});
circle.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent arg0) {
circle.startDragAndDrop(TransferMode.ANY);
Dragboard db = circle.startDragAndDrop(TransferMode.ANY);
/*
* Put a string on a dragboard
*/
ClipboardContent content = new ClipboardContent();
content.putString("foo");
db.setContent(content);
statusLabel.setText(color.toString() + " xxxxxxxxxxxxxxxxxxxxxxx");
}
});
circle.setOnDragEntered(null);
return circle;
}
}
對不起,但它不起作用。 – 2012-04-16 13:49:19
那它怎麼沒用?它拋出異常嗎?禁用光標不符合您的需求?答案需要更多解釋? – 2012-04-16 14:30:37
每個拖動事件都沒有設置Cursor.NONE的效果 - 它仍然是默認值。我發現與此同時http://javafx-jira.kenai.com/browse/RT-20326所以propably我使用onMousePressed在父節點,我會檢查子節點被按下/釋放;/ – 2012-04-16 14:52:46