我用JavaFX编写了一个小文件夹/图像浏览器。(注意-我使用Java8)
它当前显示文件夹的方式是浏览文件夹的内容,找到任何图像,随机选取其中4个,然后将这些图像与文件夹名称一起显示。
如果给定的父文件夹中有许多包含大量图像的文件夹,则此过程可能需要相当长的时间。
我试图更改代码,以便在方法运行时一次显示每个文件夹及其选定的图像,而不是在方法完成运行后一次显示所有图像。
从我对如何做到这一点的研究中,类似这样的事情的典型方法是把你的代码放在一个任务对象中,然后在一个单独的线程中运行任务,使用Platform.runlater方法在原始FX应用程序线程上进行对象更新,如:
final Group group = new Group();
Task<Void> task = new Task<Void>() {
@Override protected Void call() throws Exception {
for (int i=0; i<100; i++) {
if (isCancelled()) break;
final Rectangle r = new Rectangle(10, 10);
r.setX(10 * i);
Platform.runLater(new Runnable() {
@Override public void run() {
group.getChildren().add(r);
}
});
}
return null;
}
};
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
然而,我想更新的代码包含两个setOnMouseClicked事件imageView。setOnMouseClicked(this::folderImageClick)和myFolder。setOnMouseClicked(这个::folderClick)。在任务之外编写的调用处理程序。根据上面的例子,我想应该是这样的
final Group group = new Group();
Task<Void> task = new Task<Void>() {
@Override protected Void call() throws Exception {
for (int i=0; i<100; i++) {
if (isCancelled()) break;
final Rectangle r = new Rectangle(10, 10);
r.setX(10 * i);
r.setOnMouseClicked(this::mouseEventHandler);
Platform.runLater(new Runnable() {
@Override public void run() {
group.getChildren().add(r);
}
});
}
return null;
}
};
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
当我这样做的时候,我得到了错误
方法setOnMouseClicked(EventHandler
和
类型
新任务
有没有办法修复事件处理程序调用,使它们在任务内部工作?
当从任务的方法中使用时,此代码指向任务。显然,在您的匿名类中没有mouseEventHandler
。您需要使用对包含该方法的外部类的引用。假设类的名称为OuterClass
:
OuterClass.this::mouseEventHandler
问题内容: 我正在尝试学习JavaFX,并将swing应用程序转换为JavaFX。我想做的是使用JavaFX来显示程序的进度。 我以前在Swing中所做的是首先使用自定义JComponent创建一个JFrame。然后让我的主程序调用自定义JComponent的方法,该方法将更改JComponent和repaint()中的形状颜色。 下面给出了我想在JavaFX中实现的目标的想法: 我目前将此作为我
program 字符串 - 要执行的程序的路径,通常你需要指定 process.execPath,也就是打开当前程序的路径 arguments 字符串- 给 program 这个程序执行时的命令行参数。 title 字符串 - 要在跳转列表中显示的字符串。 description String - 任务描述. iconPath String - 在JumpList对象中显示的图标的绝对路径,Jum
program 字符串 - 要执行的程序的路径,通常你需要指定 process.execPath,也就是打开当前程序的路径 arguments 字符串- 给 program 这个程序执行时的命令行参数。 title 字符串 - 要在跳转列表中显示的字符串。 description String - 任务描述. iconPath String - 在JumpList对象中显示的图标的绝对路径,Jum
我正在尝试在javaFx中为特殊需要定制一个快捷方式系统。 这种特殊需求使得不可能使用KeyCombinaison(只限制一个键修饰符是不可接受的)。 我已经做了我适当的KeyCompin联络员系统,现在我想从节点调用一个处理程序(我在控制器之外)。但是我找不到任何优雅的解决方案来执行这个。 有一个按钮声明: 在我想从我的快捷方式代码调用控制器的操作之后。 和标准控制器。 我可以做一些工作,例如使
我想在JavaFX中制作一个程序,其中包含一个按钮,单击该按钮时,将创建一个圆并将其添加到形状的ArrayList中。以下是我的代码: 我的问题是-如何从内部句柄方法访问“circle1”?在JavaScript中,我们使用e.currentTarget。 我无法声明“Circle1”最终版本,因为我需要在之后更改它。
我正在用java开发一个聊天机器人项目,在GUI中我使用JavaFX、IDE eclipse和scene builder 8.4.1。 我在向文本区域添加背景图像时遇到问题。这是我所做的一个屏幕截图,它什么也没有显示(甚至没有错误)。 以下是场景生成器生成的fxml代码: