package sample;
import ...
public class Controller {
@FXML
AnchorPane anchorPane;
public void add() {
try {
// Node.fxml is the custom node object
Parent root = FXMLLoader.load(getClass().getResource("Node.fxml"));
anchorPane.getChildren().add(root);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我对Java和JavaFx很陌生,所以任何东西都有帮助。(不过不是编程的初学者)。
提前道谢。
多亏了“费边”和“吉克曼”,我找到了解决问题的办法。我的错误是不理解Parent extends Node--我假设我需要引用其他东西。
为了实现我想要的拖动功能,我创建了一个函数,它有一个节点输入变量(谢谢@gikkman),然后这个节点对象可以附加事件处理程序。由于Parent extends Node(我没有意识到这一点),所以我可以很容易地使用fxmlLoader.load()作为输入。
于是我就有了:
package sample;
import ...
import java.io.IOException;
public class Controller {
@FXML
AnchorPane anchorPane;
public void add() {
try {
// Node.fxml is the custom node object
Parent root = FXMLLoader.load(getClass().getResource("Node.fxml"));
// Sets the EventHandlers for dragging
dragNode(root);
// Adds the node to the scene
anchorPane.getChildren().add(root);
} catch (IOException e) {
e.printStackTrace();
}
}
// Handles all dragging EventHandlers for any node object
public void dragNode(Node node) {
// Custom object to hold x and y positions
final Delta dragDelta = new Delta();
node.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
dragDelta.x = node.getLayoutX() - mouseEvent.getSceneX();
dragDelta.y = node.getLayoutY() - mouseEvent.getSceneY();
}
});
node.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
node.setCursor(Cursor.HAND);
}
});
node.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
node.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
node.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
}
});
node.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
node.setCursor(Cursor.HAND);
}
});
}
class Delta { double x, y; }
}
问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为
我试图在JavaFX中获得一个TableView来动态显示内容。 当我运行程序时,出现以下错误: 我的控制器名为“UserInterfaceController.java”,它与FXML文件在同一个包下,我也在FXML中导入了包。为什么找不到控制器? FXML文件: 控制器: 主要类:
在JavaFX中,我试图通过单击并拖动节点来移动它。如果节点不旋转,它工作得很好,但是当我旋转它时,它开始表现得很奇怪。 在45°左右,当我移动它时,它开始抖动,在60°时,它剧烈地来回抖动。在90°时,只要我开始移动节点,它就会飞离屏幕。 下面是我用来旋转和移动节点的代码。它来自连接到节点的鼠标侦听器。 编辑:这是一些示例输出,以及显示不同节点的图片。 未旋转且缓慢向左移动时的输出: 旋转时缓慢
我已经用FXML创建了一个布局,它由一个带有sideMenu的BorderPane和一个用于其他内容的innerBorderPane组成... 但是,由于我刚刚开始使用JavaFX中的FXML,所以我只需要知道如何做下一件事... custom.FXML(这是主要的FXML布局) sideMenu.FXML(这是sideMenu FXML布局) java(这是sideMenu JavaFX控制器)
我正在尝试将一个矩形拖动到VBox,然后从VBox内部再次拖动它。 如果矩形被放置在目标VBox之外的任何位置,那么它应该将其位置恢复到它所属的位置:如果它是左VBox的子级,则将其重置回其中;如果它是右VBox的子级,则将其重置回右VBox内部。 第一部分工作正常,我可以将其拖到VBox并将其添加为子级。第二部分是我遇到问题的地方。 重现问题的步骤:<br>1)将左矩形拖动到右矩形的顶部(在VB