第一次使用JavaFX,所以我对setLayout()
/getLayout()
方法有一个问题。我在做一个弹跳球项目。首先,我使用circle
对象创建球,但由于需要传递更多参数,我决定构建自己的球类(double x,double y,double dx,double dy,double size
)。这是我以前使用circle
时使用的代码:
ball.setLayoutX(ball.getLayoutX() + dx);
ball.setLayoutY(ball.getLayoutY() + dy);
final Bounds bounds = canvas.getBoundsInLocal();
boolean right = ball.getLayoutX() >= (bounds.getMaxX() - ball.getRadius());
boolean left = ball.getLayoutX() <= (bounds.getMinX() + ball.getRadius());
boolean bottom = ball.getLayoutY() >= (bounds.getMaxY() - ball.getRadius());
boolean top = ball.getLayoutY() <= (bounds.getMinY() + ball.getRadius());
if (right || left) {
dx *= -1;
}
if (bottom || top) {
dy *= -1;
}
当将时间线
和关键帧
和事件处理程序
放入时间线
中时,就会使圆圈
“球”弹出墙壁。现在,我正试图弄清楚如何使用ball
ball来实现这一点,因为在使用我自己的对象时,无法解析getLayout()
、setLayout()
和getRadius()
方法。如何处理这个/构建自己的setLayout()
等?
只需将所有逻辑放在ball
类中:
public class Ball {
private final Circle view ;
private double dx ;
private double dy ;
public Ball(double size) {
view = new Circle(size);
}
public void move() {
Parent canvas = view.getParent();
view.setLayoutX(view.getLayoutX() + dx);
view.setLayoutY(view.getLayoutY() + dy);
final Bounds bounds = canvas.getBoundsInLocal();
boolean right = view.getLayoutX() >= (bounds.getMaxX() - view.getRadius());
boolean left = view.getLayoutX() <= (bounds.getMinX() + view.getRadius());
boolean bottom = view.getLayoutY() >= (bounds.getMaxY() - view.getRadius());
boolean top = view.getLayoutY() <= (bounds.getMinY() + view.getRadius());
if (right || left) {
dx *= -1;
}
if (bottom || top) {
dy *= -1;
}
}
public Node getView() {
return view ;
}
}
现在您可以创建一个新的球,调用canvas.getChildrens().add(ball.getView())
,而您的时间线所要做的就是调用ball.Move()
。
另一种方法是从ball
类公开适当的方法:
public double getX() {
return view.getLayoutX();
}
public void setX(double x) {
view.setLayoutX(x);
}
这个演示使用相同的思想有一个稍微复杂一些的实现。
我的代码中有以下扩展的JavaFX对象: 它使用我编写的这个客户Java类来跟踪Tile位置: 现在,我想构建一个场景(通过JavaFX场景生成器),它使用一个网格窗格,每个单元格中都有一个平铺对象。我决定首先在scene Builder中构建一个场景,使用JavaFX矩形对象而不是平铺,然后手动编辑.fxml文件并将其中的矩形更改为平铺对象。问题是Intellij现在告诉我FXML文件中的平铺对
我正在尝试使用基于自定义列表的自定义创建一个自定义。 自定义对象是名为的类名,其中包含一些用于消息内容、收件人、时间戳和状态(读取、发送等)的字段。 在看了这个问题:用FXML在JavaFX中定制ListView之后,我成功地做到了: null 现在,ConversationCell类: 我不能显示ConversationCellController,但我所能说的是,这是我(在其构造函数中)加载设
我正在开发一个应用程序,有必要将节点布置在彼此之外(或彼此顶部等)。但是,此布局只是初始布局,用户可以任意移动这些节点。在JavaFX中,如何以正确的方式实现这一点?我将用一个简单的例子来解释我的问题: 假设我有两个矩形,想把矩形2放在矩形1的右边。 在这种情况下,JavaFX还没有确定rect1的宽度,它将为零。直观地说,我会执行一个调用,让JavaFX绘制rect1,从而确定其宽度,然后添加r
我正在努力找出如何使用Java流从对象值等于x的自定义对象列表中收集自定义对象。 这没有编译,但我不认为我离得很远--有人能指出我在哪里出错吗?
问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二
问题内容: 我对Java,JavaFX和编程一般还是有点陌生,但是我遇到的问题困扰着我。 在大多数教程中,我查找了有关填充ListView(更具体地说,使用ObservableArrayList)的方法,最简单的方法是从String的ObservableList中创建它,如下所示: 但是我不想使用字符串。我想使用我制作的名为Words的自定义对象: 每个Word对象只有两个属性:wordStr