标签: javafx

JavaFX与Maven

我最近开始了一个JavaFX项目,我想使用Maven作为我的编译器/部署工具.

是否有一个很好的教程或插件来集成JavaFX和Maven?

maven-2 javafx maven

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

Textarea的透明背景在JavaFX 8

由于我使用的是JavaFX 8,所以我textarea的所有内容都不适用transparency于相应的css中定义的内容.它在Java 7中运行良好,但对于JavaFX 8的候选版本,我不能像以前那样表现.

编辑:这个问题是关于JavaFX TextArea,而不是JTextArea.
-fx-background-color: rgba(53,89,119,0.2);对textarea没有任何影响,虽然它应该有一个0.2的alpha值,但它是不相干的......

这是一个已知问题吗?

java javafx javafx-8

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

限制javafx gui更新

我随机地以高频率接收数据对象,并且需要使用这些来更新JavaFX GUI.但是,我不想用大量的runnable填充javafx事件队列(我使用Platform.RunLater).

我一直在考虑如何最好地实现限制算法.

  • 是否最好有一个单独的GUIUpdater线程来检查例如新对象的阻塞队列,然后睡眠例如30ms,然后在无限循环中再次检查?在这种情况下,阻塞队列是否是最佳数据结构?请注意我只需要最新的数据对象,blockingQueue是一个FIFO队列,我似乎无法选择最新的条目.
  • 或者 - 如果nanoTime-startTime> 30ms,只需用Platform.RunLater更新GUI会更好吗?在这种情况下,我不需要单独的线程来执行Platform.RunLater调用.但是 - 如果在30ms未通过时收到更新,然后一段时间内未收到任何更新,则最后一次更新将不会显示在GUI中.

有关如何以简短有效的方式为JavaFX Platform.RunLater GUI更新设计限制算法的任何建议?

java user-interface multithreading javafx thread-safety

15
推荐指数
1
解决办法
3361
查看次数

JavaFX 8中的常规异常处理

给定一个场景的控制器调用业务代码引发异常.我怎样才能以一般方式处理这类例外?

我尝试了这个Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler)方法,但是没有调用它,所以我相信异常会在JavaFX框架内的某个地方被捕获.

我该怎么做才能处理此异常或至少向用户显示一些有用的信息?

java exception-handling javafx java-8 javafx-8

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

无法在Windows 7中使用Java 8打印文本文件

我创建了一个报告并将其导出为文本文件,以便在矩阵打印机中打印,但是,作业的结果是一个空白页面.我在ubuntu中做了同样的事情并且打印正确.这是一个Java bug吗?

这是我向您展示问题的示例代码:

public class PrintError extends Application {

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

    public void start(Stage stage) throws PrintException {
        PrinterJob printerJob = PrinterJob.createPrinterJob();
        printerJob.showPrintDialog(stage);
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
        printRequestAttributeSet.add(new Copies(printerJob.getJobSettings().getCopies()));
        printRequestAttributeSet.add(new JobName("test", Locale.getDefault()));
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc mydoc = new SimpleDoc(ClassLoader.class.getResourceAsStream("/should-be-printed.txt"), flavor, null);
        DocPrintJob job = getPrintService(printerJob.getPrinter().getName()).createPrintJob();
        job.print(mydoc, printRequestAttributeSet);
    }

    private PrintService getPrintService(String name) {
        for (PrintService printService : java.awt.print.PrinterJob.lookupPrintServices()) {
            if (name.equalsIgnoreCase(printService.getName())) {
                return printService;
            }
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

此示例在JavaFx …

java printing javafx java-8

15
推荐指数
1
解决办法
1757
查看次数

将自定义组件添加到SceneBuilder 2.0

我需要在窗格上有一个选择侦听器和select方法,以便能够在单击节点时监视并显示突出显示.

我做了以下事情:

public class PaneWithSelectionListener extends Pane {

    private ObjectProperty<Annotation> selectedAnnotation = new SimpleObjectProperty<>();

    public PaneWithSelectionListener() { 
        super();
        selectedAnnotation.addListener((obs, oldAnno, newAnno) -> {
            if (oldAnno != null) {
                oldAnno.setStyle("");
            }
            if (newAnno != null) {
                newAnno.setStyle("-fx-border-color: blue;-fx-border-insets: 5;-fx-border-width: 1;-fx-border-style: dashed;");
            }
        });

        setOnMouseClicked(e->selectAnnotation(null));
    }

    public void selectAnnotation(Annotation ann){
        selectedAnnotation.set(ann);
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效 - 但是我不能再使用SceneBuilder了,因为我的FXML引用了这个PaneWithSelectionListener而不是Pane.我不确定如何将自定义窗格导入SceneBuilder.我已经看了其他问题,它们都是FXML和控制器的组合 - 这只是一个Pane.

有没有人知道这样做的方法,或者可能在初始化时交换Panea PaneWithSelectionListener

谢谢

javafx scenebuilder javafx-8

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

在javafx中显示工具提示会将其舞台置于前台

我正在尝试解决jdk中的这个错误:http://bugs.java.com/bugdatabase/view_bug.do? video_id = 8088624

public class Blubb extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Button btn = new Button("Click");
        btn.setTooltip(new Tooltip("Blubb"));

        Scene scene = new Scene(new BorderPane(btn), 320, 240);
        primaryStage.setScene(scene);
        primaryStage.show();

        Stage secondStage = new Stage();
        secondStage.setScene(new Scene(new BorderPane(new Button("Click")), 320, 240));
        //secondStage.initOwner(primaryStage);
        secondStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果主舞台上的按钮悬停,它将出现在第二阶段的前面.我发现调用initOwner()一个舞台将消除这种行为.

现在我的问题是:我有多个"弹出窗口",它们有一个共同的所有者(主要阶段).将鼠标悬停在主阶段上的控件上后,在initOwner()解决方法后不会导致任何意外行为.然而,如果您将鼠标悬停在弹出窗口中的控件上而另一个弹出窗口处于焦点位置,则悬停的弹出窗口将会隐藏焦点.

有没有办法可以解决这个错误,不仅是初级阶段,还有弹出窗口?

更新:结果我的解决方法有不良副作用.舞台状态的Javadocs如下:

舞台将始终位于其父窗口的顶部.

另外,什么是一种解决方法,使弹出窗口不"总是在顶部"和最小化?

java javafx

15
推荐指数
1
解决办法
815
查看次数

如何取消加载网站的webview?

我想要实现的实际上是浏览器的取消按钮,但使用JavaFX的webview.这是我到目前为止的代码:

Worker<Void> loadWorker = webView.getEngine().getLoadWorker();
if (loadWorker != null) {
    Platform.runLater(() -> loadWorker.cancel());
}
Run Code Online (Sandbox Code Playgroud)

但它有时会起作用,有时却不起作用.

取消加载页面的webview/webengine任务的正确方法是什么?

java javafx webview javafx-webengine

15
推荐指数
1
解决办法
697
查看次数

从JavaFX对话框中的数字文本字段中转义

我有一个带有几个UI元素的自定义对话框。一些TextField用于数字输入。当按下逃逸键并且焦点位于任何数字文本字段上时,此对话框不会关闭。当焦点位于没有此自定义TextFormatter的其他TextField上时,该对话框可以正常关闭。

这是简化的代码:

package application;

import java.text.DecimalFormat;
import java.text.ParsePosition;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            TextField name = new TextField();
            HBox hb1 = new HBox();
            hb1.getChildren().addAll(new Label("Name: "), name);

            TextField id = new TextField();
            id.setTextFormatter(getNumberFormatter()); // numbers only
            HBox hb2 = new HBox();
            hb2.getChildren().addAll(new Label("ID: "), id);

            VBox vbox = new …
Run Code Online (Sandbox Code Playgroud)

javafx

15
推荐指数
1
解决办法
361
查看次数

让JavaFX 11应用程序在Docker上工作

我正在尝试让一个可以在我的机器上完美运行的应用程序在docker上运行,这是我的docker文件:

FROM openjdk:11-jre-slim
VOLUME /tmp
ADD someJar.jar someJar.jar
ADD lib lib
ADD config.properties config.properties
ENTRYPOINT ["java", "-javaagent:lib/aspectjweaver-1.9.2.jar", 
    "-javaagent:lib/spring-instrument-5.1.6.RELEASE.jar", "--module-path", 
    "lib/javafx-sdk-11.0.2", "--add-modules=javafx.controls", "- 
    Dprism.verbose=true", "-jar","someJar.jar"]
Run Code Online (Sandbox Code Playgroud)

我还尝试将其基于高山openjdk11版本,其结果相同:

FROM adoptopenjdk/openjdk11:alpine
VOLUME /tmp
RUN apk update && apk add libx11 mesa-gl gtk+3.0 && apk update
ADD someJar.jar someJar.jar
ADD lib lib
ADD config.properties config.properties
ENTRYPOINT ["java", "-javaagent:lib/aspectjweaver-1.9.2.jar", "-javaagent:lib/spring-instrument-5.1.6.RELEASE.jar", "--module-path", "lib", "--add-modules=javafx.controls", "-Dprism.verbose=true", "-jar","someJar.jar"]
Run Code Online (Sandbox Code Playgroud)

The lib folder contains the linux flavor of the openJFX runtime (.so files and .jar files). I am developing this on …

java javafx docker openjfx java-11

15
推荐指数
1
解决办法
587
查看次数