小编Zep*_*hyr的帖子

JavaFX应用程序在关闭后仍然运行

我在关闭我的javaFX应用程序时遇到问题,当我点击我的舞台上的关闭按钮时,我的应用程序消失但是如果我在我的任务管理器中查找它,我的应用程序仍然没有关闭.我试图使用下面的代码强制它关闭主线程和所有子线程,但问题仍然存在.

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {

            @Override
            public void handle(WindowEvent t) {
                Platform.exit();
            }

        });
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2

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

JavaFX TextField将焦点上的填充更改为0

我正在尝试将填充设置为JavaFX中的文本字段(使用Java 8_192)。我有一个带有3个TextField的简单VBox。如果我手动在第一个TextField上设置填充,则其他TextField在聚焦时会以某种方式将其填充重置为0。

第一个TextField具有手动填充:

屏幕截图1

当聚焦第二个(或第三个)TextField时,它们的填充值为0:

在此处输入图片说明

如果我专注于其他内容,则其填充将重置为javafx(4、7、4、7)设置的常规填充。奇怪的是,如果我将的填充设置tf2tf1,则不会有任何问题。另外,如果我手动设置每个TextField的填充,它们将不会重置为0。但这显然不能作为答案...

我的代码:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        VBox vbox = new VBox();
        vbox.setSpacing(10);
        vbox.setPadding(new Insets(10, 10, 10, 10));

        TextField tf1 = new TextField();
        TextField tf2 = new TextField();
        TextField tf3 = new TextField();

        vbox.getChildren().addAll(tf1);
        vbox.getChildren().addAll(tf2);
        vbox.getChildren().addAll(tf3);

        tf1.setPadding(new Insets(7, 7, 7, 7));
        // Setting the padding of tf2 instead of tf1 works

        Scene scene = new Scene(vbox, 250, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java javafx padding textfield

11
推荐指数
1
解决办法
116
查看次数

如何在DefaultButton操作之前使用KeyPressed事件?

我很难消耗一个onKeyPressed活动.TextField我的应用程序中有一个允许用户按[ENTER]键获取某个功能; 但是,我也有一个为场景指定的默认按钮.

虽然我可以成功触发按下键时所需的操作,但TextField始终先执行默认按钮的操作.当用户进入时,我需要完全为keypress使用事件TextField.

请参阅以下MCVE:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        // Simple UI
        VBox root = new VBox(10);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        // TextField
        TextField textField = new TextField();

        // Capture the [ENTER] key
        textField.setOnKeyPressed(event -> {
            if (event.getCode() …
Run Code Online (Sandbox Code Playgroud)

java javafx

7
推荐指数
1
解决办法
331
查看次数

如果在 ChangeListener 中更改焦点,则 DatePicker 不会提交值

JDK 1.8 (8u231)、Windows 10 出现以下问题

我有一个DatePicker带有侦听器的设置,该侦听器显示Alert值何时更改。但是,一旦Alert显示 ,就会datePicker.valueProperty()恢复到其原始值。

这似乎不是“按设计工作”,并且多个其他开发人员已确认该问题在更高版本的 Java 中不存在。

这是一个 MCVE 来演示:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DatePickerCommit extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        // Simple Interface
        VBox root = new VBox(10);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(10));

        DatePicker datePicker = new DatePicker();

        // Add listener on DatePicker
        datePicker.valueProperty().addListener((observable, oldValue, …
Run Code Online (Sandbox Code Playgroud)

java javafx

7
推荐指数
1
解决办法
721
查看次数

根据字体大小设置 &lt;div&gt; 高度?

我有一个 Java 应用程序,它在 WebView 中显示单个 HTML 文件。

以下 CSS 片段用于设置<div>该网页中的 a 样式:

.header {
    margin: auto;
    background-color: #0479ccff;
    font-weight: bold;
    color: #FFFFFF;
    padding: 5px;
    height: 20px;
}
Run Code Online (Sandbox Code Playgroud)

但是,应用程序用户可以调整文本中文本的字体大小<div>,因此我需要一种方法来缩放 div 相对于字体大小的高度。对于较大的字体,<div>高度保持不变,并且文本与其底部边框重叠。

有没有办法用纯 CSS 来做?

html css

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

JavaFX - 如何检测 Windows 注销/关闭请求?

我有一个应用程序必须在退出时处理一些方法。但是,当用户在没有先关闭我的应用程序的情况下关闭 Windows 时,Windows 会终止该应用程序并且不会运行关闭方法。

如何检测用户何时请求关闭或注销 Windows?我需要运行的方法需要几毫秒才能完成,因此我不一定需要推迟或中断关闭过程。

我已经使用 JNA 来响应机器被锁定/解锁,但该onMachineLogoff()方法似乎也没有捕获关闭请求。

javafx jna

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

如果启动了新的任务实例,如何取消任务?

我的应用程序包含一个ListView每次选择项目时启动后台任务的应用程序.然后,后台任务在成功完成时更新UI上的信息.

但是,当用户快速点击一个又一个项目时,所有这些任务都会继续,最后一个任务将完成"获胜"并更新UI,无论最后选择了哪个项目.

我需要的是以某种方式确保此任务在任何给定时间只有一个实例运行,因此在开始新任务之前取消所有先前任务.

这是一个演示该问题的MCVE:

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class taskRace  extends Application {

    private final ListView<String> listView = new ListView<>();
    private final Label label = new Label("Nothing selected");
    private String labelValue;

    public static void main(String[] args) {

        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {

        // Simple UI
        VBox root = new VBox(5);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(10));
        root.getChildren().addAll(listView, label);

        // Populate the …
Run Code Online (Sandbox Code Playgroud)

java java.util.concurrent

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

如何将一次在文本字段中可见的字符数限制为小于文本字段的宽度?

我已经TextField按照这篇文章在JavaFX中添加了一个图像,但是现在我的问题是文本可能溢出以掩盖该图像,如下所示:

文字栏位文字在图片上重叠

我想做的是,当我到达图像的左边缘时,它应该开始切除可见的文本,而不是TextField在到达边缘时移动并剪切文本TextField。我怎样才能做到这一点?

css java javafx background-image textfield

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

如何解析/映射 JavaFX CSS 文件以检索其属性和值?

我的应用程序允许用户使用自定义 CSS 主题来设计界面样式。我有几个预构建的“主题”可供选择,它们非常简单,只有 3 个属性。

示例 CSS:

.root{
    -fx-background: #325c81;
    -fx-default-button: #77a3ca;
    -fx-base: #a7c4dd;
}
Run Code Online (Sandbox Code Playgroud)

该应用程序有 3 个ColorPicker控件,需要允许用户为每个属性选择颜色并将其保存回 CSS 文件。

我实际编写 CSS 文件没有问题,但我找不到解析.css文件的方法,以便使用文件中的值设置ColorPicker控件的值.css

基本程序流程

1) 用户从ComboBox以下选项中选择一个预制主题:

cboPresetTheme.valueProperty().addListener((observable, priorTheme, newTheme) -> {
                Utility.applyTheme(cboPresetTheme.getScene(), newTheme);
            });
Run Code Online (Sandbox Code Playgroud)

2) 关联.css文件被加载并应用到当前Scene

public static void applyTheme(Scene scene, Theme theme) {
    scene.getStylesheets().clear();

    File css = new File("themes/" + theme.getFileName());
    File fontFile = new File("themes/Font.css");

    scene.getStylesheets().addAll(
            css.toURI().toString(),
            fontFile.toURI().toString());
}
Run Code Online (Sandbox Code Playgroud)

3) 使用ColorPicker来自应用的值更新3 个控件 …

css java parsing javafx

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

如何在谓词中对 FilteredList 结果进行优先级排序/排名?

我的应用程序包含 aTextField和 a ListView。允许TextField用户输入搜索词,这些搜索词将在他们键入时过滤内容ListView

过滤过程将匹配每个DataItem字段中的多个字段ListView,如果其中任何一个匹配,则返回结果。

然而,我想做的是让这些结果优先考虑与一个特定字段匹配的项目而不是其他字段。

例如,在下面的 MCVE 中,我有两项:ComputerPaper。该Computer项目有一个keyword“paper”,因此搜索“paper”应该返回Computer结果。

但是,由于我还有一个名为 的项目Paper,因此搜索应返回Paper到列表顶部。但在 MCVE 中,结果仍然按字母顺序排列:

截屏

问题:我如何确保DataItem.name上面列出的任何匹配项都与 a 匹配DataItem.keywords

编辑:在搜索字段中输入“pap”也应该在顶部返回“Paper”,然后是其余的匹配项,因为部分搜索词与名称部分匹配DataItem


MCVE


数据项.java:

import java.util.List;

public class DataItem {

    // Instance properties
    private final IntegerProperty id = new SimpleIntegerProperty();
    private final StringProperty name = new SimpleStringProperty();
    private final StringProperty description = …
Run Code Online (Sandbox Code Playgroud)

java javafx predicate

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