Bad*_*isi 7 javafx-2 scenebuilder
我正在JavaFx 2.2中构建一个应用程序,它包含一个splitpane,左侧是一个组件面板,右侧是一个工作表.基本上我想做的是一个简单的所见即所得编辑器,你从左到右拖动组件,然后在右侧安排它们.
我花了最近几天试图实现具有SceneBuilder的相同拖放功能,但没有运气.
在http://docs.oracle.com/javafx/2/drag_drop/HelloDragAndDrop.java.html上的示例之后,我设法得到拖放工作,但我找不到任何方法来更改默认值拖动时出现的文件图标(并将其替换为我正在拖动的组件的快照)以及当您处于无法放置的内容时如何显示禁用图标.
任何帮助(可能是建议,代码片段,样本或其他)将不胜感激:)
谢谢 !
Bad*_*isi 17
[UPDATE]
最后自己管理:
/* The 'sceneRoot' object is the root Node of the scene graph
* stage.setScene(new Scene(sceneRoot, 1280, 1024));
*/
private ImageView dragImageView = new ImageView();
private Node dragItem;
Run Code Online (Sandbox Code Playgroud)
_
rightPane.setOnMouseDragEntered(new EventHandler<MouseDragEvent>() {
public void handle(MouseDragEvent e) {
rightPane.setStyle("-fx-border-color:red;-fx-border-width:2;-fx-border-style:solid;");
e.consume();
}
});
rightPane.setOnMouseDragExited(new EventHandler<MouseDragEvent>() {
public void handle(MouseDragEvent e) {
rightPane.setStyle("-fx-border-style:none;");
e.consume();
}
});
rightPane.setOnMouseDragReleased(new EventHandler<MouseDragEvent>() {
public void handle(MouseDragEvent e) {
//TODO: add new instance of dragItem to rightPane
e.consume();
}
});
Run Code Online (Sandbox Code Playgroud)
_
private void addGesture(final Node node) {
node.setOnDragDetected(new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
SnapshotParameters snapParams = new SnapshotParameters();
snapParams.setFill(Color.TRANSPARENT);
dragImageView.setImage(node.snapshot(snapParams, null));
sceneRoot.getChildren().add(dragImageView);
dragImageView.startFullDrag();
e.consume();
}
});
node.setOnMouseDragged(new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
Point2D localPoint = sceneRoot.sceneToLocal(new Point2D(e.getSceneX(), e.getSceneY()));
dragImageView.relocate(
(int)(localPoint.getX() - dragImageView.getBoundsInLocal().getWidth() / 2),
(int)(localPoint.getY() - dragImageView.getBoundsInLocal().getHeight() / 2)
);
e.consume();
}
});
node.setOnMouseEntered(new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
node.setCursor(Cursor.HAND);
}
});
node.setOnMousePressed(new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
dragItem = node;
dragImageView.setMouseTransparent(true);
node.setMouseTransparent(true);
node.setCursor(Cursor.CLOSED_HAND);
}
});
node.setOnMouseReleased(new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
dragItem = null;
dragImageView.setMouseTransparent(false);
node.setMouseTransparent(false);
node.setCursor(Cursor.DEFAULT);
sceneRoot.getChildren().remove(dragImageView);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10102 次 |
| 最近记录: |