标签: javafx-8

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

问题

我的应用程序的预加载器处理特定于应用程序的初始化.现在我正在尝试扩展它,以便预加载器还显示下载的应用程序JAR的进度.


TL; DR

  • 为什么预加载器在第2阶段没有加载,因为这应该处理PreloaderFx::handleProgressNotification();跟踪JAR的下载我想?

  • 2016年3月14日更新:使用DownloadServiceListener解决这个问题的方法是什么?如何将其连接到JavaFX阶段?


文档

根据Oracle的说法,启动应用程序有4个阶段:

  • 阶段1:初始化:Java Runtime的初始化和初始检查确定在启动应用程序之前必须加载和执行的组件.在此阶段,将显示启动画面.默认是这样的:

Java开始了

  • 阶段2:加载和准备:从网络或磁盘缓存加载所需的资源,并进行验证过程.所有执行模式都会看到默认或自定义预加载器.在此阶段,应显示我的自定义预加载器.

  • 阶段3:特定于应用程序的初始化:应用程序已启动,但可能需要在其完全正常运行之前加载其他资源或执行其他冗长的准备工作.目前,我的自定义预加载器显示如下:

预载

  • 阶段4:应用程序执行:显示应用程序并准备使用.在我的例子中,显示了一个登录窗口,用户可以继续.

登录


我的情况

我注意到的第一件事是,在阶段2中,未显示处理应用程序JAR下载的默认JavaFX预加载器.因此,用户感觉程序没有提前启动或终止,使他们多次打开JNLP文件.下载JAR后,我们进入阶段3并显示预加载器.

但是,我希望我的自定义预加载器能够处理ProgressBar中的下载进度(阶段2).我使一切尽可能简单,以便在应用程序启动期间跟踪发生的事件.这是基于JewelseaOracle示例的示例:

预载:

public class PreloaderFX extends Preloader {

        Stage stage;
        //boolean noLoadingProgress = true;

        public static final String APPLICATION_ICON
            = "http://cdn1.iconfinder.com/data/icons/Copenhagen/PNG/32/people.png";
        public static final String SPLASH_IMAGE
            = "http://fxexperience.com/wp-content/uploads/2010/06/logo.png";

        private Pane splashLayout;
        private ProgressBar loadProgress;
        private Label progressText;
        private static final int SPLASH_WIDTH = 676;
        private static final …
Run Code Online (Sandbox Code Playgroud)

java jnlp java-web-start javafx-8

28
推荐指数
2
解决办法
3208
查看次数

带控制器的多个FXML,共享对象

各位晚上好,

我已经在这个主题上发现了很多帖子,但我仍然无法将一个对象从Controller1传递给Controller2.有没有一个完整的教程或一些示例项目,这样做?

在我遇到困难之前,我已经走到了这一步:

国家级

public class Country {
private SimpleStringProperty country = new SimpleStringProperty("");

//Constructor
public Country() {
}

//GETTERS
public String getCountry() {
    return country.get();
}

//SETTERS
public void setCountry(String value) {
    country.set(value);
}

@Override
public String toString() {
    return getCountry();
}
}
Run Code Online (Sandbox Code Playgroud)

程序启动时,主要的FXML被加载(Sample.fxml).其中包含一个边框窗格,顶部面板中有一个菜单栏,中间有一个内容窗格.在初始化时,我创建一个新的Country对象并将其存储在全局变量中.我有一个方法,当单击一个菜单项时,将另一个FXML加载到内容窗格中:

SampleController.java

public class SampleController implements Initializable {

@FXML
private Pane pContent;

private Country c;

@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
    System.out.println(c); //this prints Belgium, which is correct

    URL url = getClass().getResource("Sub1.fxml");

    FXMLLoader fxmlloader …
Run Code Online (Sandbox Code Playgroud)

controller javafx-2 fxml javafx-8

27
推荐指数
1
解决办法
4万
查看次数

JavaFX ComboBox在Windows 10上没有响应

我最近升级到Windows 10,在Windows 8.1中运行的JavaFX代码似乎在10中冻结.我已经跟踪了在对话框中打开ComboBox的问题.这似乎冻结了任何JavaFX程序.还有其他人有同样的问题吗?(Windows 10计算机仍然很少,所以很好地确认bug确实是JavaFX问题)

我在下面附上了示例代码.主阶段的ComboBox很好但是当我打开一个对话框并尝试在那里使用ComboBox时,整个事情就会冻结.我在Eclipse 4.4.0中使用Java 8u51

package javafxExamples;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceDialog;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ComboErrorTest extends Application {

String[] list={"Jamie", "Arthur", "Gordon"};

private Stage stage;

public static void main(String[] args) {
    launch(args);
}


@Override
public void start(Stage stage) throws Exception {
    //create box in main stage.
    ComboBox<String> comboBox=new ComboBox<String>(); 
    for (int i=0; i<list.length; i++){
        comboBox.getItems().add(list[i]);
    }
    comboBox.getSelectionModel().select(list[0]);

    BorderPane pane = new BorderPane(comboBox);
    pane.setPrefSize(400, …
Run Code Online (Sandbox Code Playgroud)

windows combobox javafx javafx-8 windows-10

27
推荐指数
2
解决办法
5317
查看次数

JavaFX8:如何在Tableview中创建用于选择行的侦听器?

我目前在一个屏幕上有两个tableview,这导致两个TableView都有用户可以选择的行.

现在我只希望同时选择一行(与从中选择哪个TableView无关).我正在考虑某种类型的侦听器,当选择一行时,该侦听器会取消选择另一行.这是我最初的设置:

步骤1 搜索将方法绑定到行选择的方法(没有类似的东西tableview.setOnRowSelected(method))

步骤2 创建一个类似于一种监听器的方法:当选择一行时,取消选择另一行(我知道如何做这部分)

Class1 selectedObject1 = (Class1)tableview1.getSelectionModel().getSelectedItem();
Class2 selectedObject2 = (Class2)tableview2.getSelectionModel().getSelectedItem();

if(selectedObject1 != null && selectedObject2 != null) {
   tableview1.getSelectionModel().clearSelection();
}
Run Code Online (Sandbox Code Playgroud)

所以,第一步就是问题所在.我想到了一个可以在其上创建监听器的可观察列表,然后将所选行添加到列表中.发生这种情况时,侦听器可以调用该方法.任何人都知道如何制作这个?

任何帮助是极大的赞赏.

javafx tableview javafx-8

26
推荐指数
1
解决办法
5万
查看次数

是否可以在Scala中使用Java 8样式方法引用?

我正在Scala中开发JavaFX8应用程序,但我无法弄清楚如何将方法引用传递给事件处理程序.为了澄清,我没有使用ScalaFX库,而是直接在JavaFX上构建我的应用程序.

这是相关的代码段.

InputController.java(我用Java编写了这个测试类,以隔离问题只使用方法引用)

public class InputController {
    public void handleFileSelection(ActionEvent actionEvent){
        //event handling code
    }

    public InputController() {
        //init controller
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作(Java)

InputController inputController = new InputController();
fileButton.setOnAction(inputController::handleFileSelection);
Run Code Online (Sandbox Code Playgroud)

这不起作用(Scala)

val inputController = new InputController
fileButton.setOnAction(inputController::handleFileSelection)
Run Code Online (Sandbox Code Playgroud)

这是编译器的错误消息(Scala 2.11.6).

Error:(125, 45) missing arguments for method handleFileSelection in class Main;
follow this method with '_' if you want to treat it as a partially applied function
    fileButton.setOnAction(inputController::handleFileSelection)
                                            ^
Run Code Online (Sandbox Code Playgroud)

如果我使用Scala 2.12.0-M2,我会收到不同的错误消息.

Error:(125, 45) missing argument list for method handleFileSelection in class Main …
Run Code Online (Sandbox Code Playgroud)

java scala java-8 javafx-8

26
推荐指数
1
解决办法
5904
查看次数

JavaFX:如何更改焦点遍历策略?

在JavaFX中是否可以更改焦点遍历策略,例如在AWT中?

因为我的两个HBoxes 的遍历顺序是错误的.

java javafx focus javafx-2 javafx-8

25
推荐指数
5
解决办法
3万
查看次数

在JavaFX Spinner中手动输入文本不会更新值(除非用户按下ENTER)

似乎Spinner控件在用户明确按Enter键之前不会更新手动键入的值.因此,他们可以键入一个值(不按回车键)退出控件,并提交表单,并且微调器中显示的值不是微调器的值,它是旧值.

我的想法是为丢失的焦点事件添加一个监听器,但我看不到一种获取输入值的方法?

spinner.focusedProperty().addListener((observable, oldValue, newValue) -> 
{
    //if focus lost
    if(!newValue)
    {
        //somehow get the text the user typed in?
    }
});
Run Code Online (Sandbox Code Playgroud)

这是奇怪的行为,它似乎违反了GUI微调控件的惯例.

java javafx spinner javafx-8

24
推荐指数
2
解决办法
9574
查看次数

JavaFX 8 HiDPI支持

我刚刚在Arch Linux上的4k屏幕上试用了JavaFX Hello World示例,但遗憾的是GUI无法扩展.

文件说:

Hi-DPI支持.JavaFX 8现在支持Hi-DPI显示.

那么如何让我的应用程序dpi识别?

java hdpi javafx-8

23
推荐指数
1
解决办法
1万
查看次数

我在哪里可以找到JDK 8/JavaFX 8源代码?

我想重写FXMLLoaderJDK 8 的实现并重新编译.

哪里可以找到JDK8/JavaFX 8的源代码?

openjdk javafx java-8 javafx-8

22
推荐指数
2
解决办法
2万
查看次数

从另一个类启动JavaFX应用程序

我需要从另一个"容器"类启动一个javafx应用程序并在Application上调用函数,但是似乎没有任何方法可以获得对使用Application.launch()方法启动的Application的引用.这可能吗?谢谢

javafx-8

22
推荐指数
2
解决办法
5万
查看次数