Tag: javafx 8

使用没有FXML的JavaFX控制器

是否有可能在不使用FXML的情况下使用带有JavaFX GUI的控制器。 我注意到FXML文件包含一个fx-controller属性来绑定控制器,但我觉得它不是一个简单的方法来使用它。 有关在不使用FXML文件或JavaFX Scene Builder的情况下使用JavaFX创建MVC的任何想法?

JavaFX中的重渲染任务(在canvas中)阻止GUI

我想创建一个在canvas中执行许多渲染的应用程序。 正常的JavaFX方式阻止了GUI:按下下面的应用程序代码中的按钮真的很难(用Java 8运行)。 我在网上搜索,但JavaFX不支持后台渲染:所有渲染操作(如strokeLine)都存储在缓冲区中,稍后在JavaFX应用程序线程中执行。 所以我甚至不能使用两个canvas并在渲染后进行交换。 此外,javafx.scene.Node.snapshot(SnapshotParameters,WritableImage)不能用于在后台线程中创建映像,因为它需要在JavaFX应用程序线程内运行,因此它也会阻止GUI。 有任何想法,有一个非阻塞GUI与许多渲染操作? (我只想按下按钮等,同时在后台以某种方式执行渲染或定期暂停) package canvastest; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.StrokeLineCap; import javafx.stage.Stage; public class DrawLinieTest extends Application { int interations = […]

使用JFXPanel Swing interop防止JavaFX线程死亡?

我将几个JFXPanels嵌入到Swing应用程序中,当JFXPanel不再可见时,JavaFX线程就会死掉。 这是有问题的,因为在JavaFX线程死后创建另一个JFXPanel将不会启动另一个JavaFX线程,因此JFXPanel将为空。 据我所知,JFXPanel ctor通过调用以下命令启动JavaFX线程: PlatformImpl.startup(new Runnable() { @Override public void run() { // No need to do anything here } }); 稍后,一旦JFXPanel具有父组件,就会调用其addNotify方法,该方法调用registerFinishListener ,该方法使用PlatformImpl注册PlatformImpl.FinishListener() 。 注册FinishListener的行为可防止JavaFX线程在调用PlatformImpl.checkIdle()时死亡。 当JFXPanel不再可见时,其removeNotify方法是调用deregisterFinishListener()调用: private synchronized void deregisterFinishListener() { if (instanceCount.decrementAndGet() > 0) { // Other JFXPanels still alive return; } PlatformImpl.removeListener(finishListener); finishListener = null; } 当instanceCount为零时, FinishListener被删除,导致PlatformImpl.tkExit在以下代码中调用PlatformImpl.tkExit ,导致JavaFX线程死亡: private static void notifyFinishListeners(boolean […]

什么是JavaFX相当于JSyntaxPane用于编写代码编辑器?

以前在Swing中,我使用JSyntaxPane来创建一个小的Java源代码编辑器。 为了实践,我决定在JavaFX中重做整个项目并添加对更多语言的支持。 最好尽可能多。 但是,似乎没有类似于JSyntaxPane 。 一些研究让我Tom Schindl了Tom Schindl的博客 ,他在博客中创建了一个具有适当语法高亮的源代码查看器。 遗憾的是没有编辑支持。 然后是JewelSea的博客,但从截图来看,它看起来就像SO的type-and-preview方法。 在代码编辑器中不是所需的东西。 同样,从JFXperience我发现在JavaFX 8中可以使用突出显示和缩进和编辑面板/节点,它还允许将Swing嵌入到Java中。 那么,我的其他选择是什么? 我知道JavaFX可以与JavaScript互操作,所以我有没有办法使用一些JavaScript库来实现同样的目标?

JavaFX的。 为标题栏和操作系统任务栏设置不同的图标

JavaFX中是否有一种方法可以为标题栏和操作系统任务栏设置不同的应用程序图标? 问题是系统任务栏中显示的图标与标题栏中的图标相比要大得多,并且系统无法正确调整它们的大小。 我想为不同的图标大小使用不同的图像。 与您在.ico文件中的操作类似。 如果我调用stage.getIcons().add(…)两次,前一个图像将始终用于两个条形。 出于此目的,我也无法使用已存在的.ico文件(支持不同大小)。

如何设置Dialog控件Java FX / Java 8的图标

我可能会遗漏一些非常明显的东西,但我无法找到如何为Dialog组件设置Icon(更准确地说ProgressDialog)。 我知道怎么做一个舞台, this.primaryStage.getIcons().add(new Image(getClass().getResourceAsStream(“/icon/Logo.png”))); 但我没有为Dialog家族找到任何东西。 不知何故,设置舞台图标不会影响对话框图标。 谢谢

获取javaFX 8中节点的屏幕坐标

我正在开发一个Windows 8.1 64位的JavaFX应用程序,带有4GB的RAM,JDK版本为8u45 64bit。 我想使用Robot捕获部分屏幕,但问题是我无法获取我想要捕获的锚定窗格的屏幕坐标,我不想使用snapshot因为输出质量很差。 这是我的代码。 我已经在这个链接中看到了这个问题在JavaFX中 获取 Node的全局坐标,并且这个在javaFX中获得了一个节点的真实位置,我尝试了每个答案,但没有任何工作,图像显示了屏幕的不同部分。 private void capturePane() { try { Bounds bounds = pane.getLayoutBounds(); Point2D coordinates = pane.localToScene(bounds.getMinX(), bounds.getMinY()); int X = (int) coordinates.getX(); int Y = (int) coordinates.getY(); int width = (int) pane.getWidth(); int height = (int) pane.getHeight(); Rectangle screenRect = new Rectangle(X, Y, width, height); BufferedImage capture = […]

如何在预加载器中处理java web start(jnlp)下载进度?

问题 我的应用程序的预加载器处理特定于应用程序的初始化。 现在我正在尝试扩展它,以便预加载器还显示下载的应用程序JAR的进度。 TL; DR 为什么预加载器在阶段2期间没有加载,因为这应该处理PreloaderFx::handleProgressNotification(); 我想跟踪JAR的下载? 2016年3月14日更新 :使用DownloadServiceListener解决这个问题的方法是什么? 如何将其连接到JavaFX阶段? 文档 根据Oracle的说法 ,启动应用程序有4个阶段: 阶段1:初始化 :Java Runtime的初始化和初始检查确定在启动应用程序之前必须加载和执行的组件。 在此阶段,将显示启动画面。 默认是这样的: 阶段2:加载和准备 :从网络或磁盘缓存加载所需的资源,并进行validation过程。 所有执行模式都会看到默认或自定义预加载器。 在此阶段,应显示我的自定义预加载器。 阶段3:特定于应用程序的初始化 :应用程序已启动,但可能需要在其完全正常运行之前加载其他资源或执行其他冗长的准备工作。 目前,我的自定义预加载器显示如下: 阶段4:应用程序执行 :显示应用程序并准备使用。 在我的例子中,显示了一个登录窗口,用户可以继续。 我的情况 我注意到的第一件事是,在阶段2中 ,没有显示处理应用程序JAR下载的默认JavaFX预加载器。 因此,用户感觉程序没有提前启动或终止,使他们多次打开JNLP文件。 下载JAR后,我们进入阶段3并显示预加载器。 但是,我希望我的自定义预加载器能够处理ProgressBar中的下载进度(阶段2)。 我使一切尽可能简单,以便在应用程序启动期间跟踪发生的事件。 这是基于Jewelsea和Oracle示例的示例 : 预载: public class PreloaderFX extends Preloader { Stage stage; //boolean noLoadingProgress = true; public static final String APPLICATION_ICON […]

JavaFX的任务似乎消耗了exception。 它是一个bug还是一个function?

考虑以下代码: Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> { System.out.println(“An exception occurred!”); }); // set the exception handler for the JavaFX application thread Thread.currentThread().setUncaughtExceptionHandler((Thread t, Throwable e) -> { System.out.println(“An exception occurred!”); }); Task task = new Task() { @Override public Void call() throws Exception { throw new RuntimeException(“foobar”); }; }; new Thread(task).start(); 如果我们运行代码,运行时exception永远不会触发默认的exception处理程序,而是由任务使用。 我发现的抵消这种情况的唯一方法是在task.setOnFailed中重新抛出exception: task.setOnFailed((WorkerStateEvent t) […]

javafx如何使用复选框在表视图中获取选定的行数据

在这个项目中,我无法确定是否在控制台输出中选中了Checkbox数据。 我的代码: import java.util.Arrays; import java.util.Iterator; import java.util.List; import javafx.application.Application; import javafx.beans.Observable; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn.CellEditEvent; import javafx.scene.control.TablePosition; import javafx.scene.control.TableView; import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.control.cell.PropertyValueFactory; import […]