FX 19 中组合框焦点问题

2023-11-22

升级到最新的 JavaFX 版本 (19) 后,我遇到了一些奇怪的问题。

如果我将最后一个选项设置为 ComboBox 中的值,那么在第一次打开时,如果我选择任何选项,下拉列表将不会隐藏。之后,下拉菜单将像往常一样工作。奇怪的是,只有当我将最后一个选项设置为值时才会发生这种情况。当我设置除最后一个选项之外的任何其他选项时,它运行良好。

enter image description here

在上面的示例中,您可以注意到:

  • 如果设置“四”:即使我选择不同的选项(仅第一次),下拉列表也不会隐藏。
  • 如果设置为“三”:下拉菜单将照常工作。

当我试图调查根本原因时,我几乎得出结论,这是因为新功能“focusWithIn”。因为这就是导致问题发生的地方。

但经过进一步调查,我还注意到焦点被搞乱了。在上面的 gif 中,您还可以注意到,如果我将最后一个选项设置为值,则“聚焦”样式不会应用于 ComboBox(同样只是第一次,直到我将焦点移到另一个节点,当我回来时,它会照常工作) )。而如果我设置不同的值,则聚焦样式效果会很好。

当我尝试将一些日志放在焦点属性上时,下面是我关注 ComboBox 时的输出(最后一个选项作为值):

ComboBox focused : true
ComboBox focused : false

焦点立即关闭!

唯一让我困惑的是“为什么只有最后一个选项?“。我知道一般都会出现问题/错误。但是与最后一个选项的特殊关系,我无法理解:)

不管怎样,我尝试了不同的方法来使下拉隐藏和焦点起作用,但没有任何效果。你们有什么建议(解决方法)来解决这个问题吗?

下面是工作演示:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ComboBoxDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        ComboBox<String> comboBox = new ComboBox<>();
        comboBox.getItems().addAll("One", "Two", "Three", "Four");
        comboBox.getSelectionModel().select("Four"); // Change value to any other options, it works
        comboBox.focusedProperty().addListener((obs, old, focused) -> {
            System.out.println("ComboBox focused : " + focused+", showing: "+comboBox.isShowing());
            // ATTEMPT #2 : Requesting the focus by conditional checking (DIDN'T WORKED)
            if(comboBox.isShowing() && !focused){
                comboBox.requestFocus();
            }
        });

        // ATTEMPT #1 : Requesting the focus after the dropdown is shown (DIDN'T WORKED)
        comboBox.setOnShown(e -> {
            System.out.println("ComboBox shown...");
            comboBox.requestFocus();
        });

        VBox root = new VBox(new CheckBox("Just for focus grabbing"), comboBox);
        root.setAlignment(Pos.CENTER);
        root.setSpacing(20);
        
        Scene scene = new Scene(root, 300, 200);
        primaryStage.setTitle("ComboBox FX " + System.getProperty("javafx.runtime.version"));
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

绝对是 JavaFX 19 中的一个错误。 我测试了很多东西,似乎为了在生成时设置组合框的初始选择,它需要两个刻度:

ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll("One", "Two", "Three", "Four");
initializeComboBox(comboBox, 3);
private void initializeComboBox(ComboBox comboBox, int intialIndex) {
    Platform.runLater(()->{
        Platform.runLater(()->{
            comboBox.getSelectionModel().select(intialIndex);
        });
    });
}

我无法回答为什么仅最后一项需要它。这将是开发人员的工作。但是,这将同时作为此版本中此特定用例的解决方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FX 19 中组合框焦点问题 的相关文章

  • ListChangeListener wasPermutated 块

    ListChangeListener 的 JavaDoc 提供了用于处理更改的模板 但是 我不知道如何处理排列 对于每个索引 我都可以找到该项目的新索引在哪里 但我不知道如何处理它 这是一个独立于编程语言的难题 ObservableList
  • javafx组合框下拉菜单从屏幕边缘跳出

    我有最新版本的 java 8 40 和 javaFX 我有一个包含 10 个项目的复选框 我编译并运行该程序 如果我将程序窗口移至监视器屏幕的底部 下拉列表将从监视器屏幕中消失 无法将项目点击出屏幕 相反 如果我尝试使用场景生成器 2 0
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • 在 JavaFX 中更改 ListView 字体大小

    我想知道如何更改 JavaFx 中的列表视图项目文本字体大小 每行文本的大小会有所不同 我尝试使用细胞因子属性 但我不知道如何使用它 有人可以帮我吗 类似的问题在这里 如何更改JavaFX中ListView的字体大小 https stack
  • 如何获取JavaFX的版本号?

    如何在运行时找出我正在使用哪个版本的 JavaFX 简单的方法之一就是简单地阅读javafx properties文件位于您的 JAVA HOME jre lib目录 我现在安装了 Java 1 7 u9 与之捆绑的 JavaFX 是 v2
  • JavaFX 打印自定义纸张尺寸

    在 JavaFX 中 我想将照片打印到 10x15 的纸张上 有一些纸张常数 但没有 100x150 mm 常数 是否可以创建自己的纸张以在页面布局中使用它 Thanks PageLayout pageLayout printer crea
  • Java - ZUI(可缩放用户界面)

    我目前正在做一个小型个人项目 需要显示极其大量的数据 我突然想到实现一种可缩放的用户界面 以允许用户在大量数据中导航 我知道现有的项目 例如ZVTM http zvtm sourceforge net and 短笛2d https code
  • JavaFX webview 不保存cookie

    我对 JavaFX 还很陌生 需要使用浏览器窗口编写应用程序 浏览器将用于登录微图库机构 fotolia 以解决登录时出现的验证码 显然 当关闭并稍后重新启动我的应用程序时 cookie 不会被保存 有没有办法在 JavaFX webvie
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言
  • 如何在 Java FX 中以编程方式模拟箭头键按下

    我想让我的 JFX 应用程序模拟箭头键按下 当它们在 TextField 中注册时 但我不知道如何发送字符串或字节以外的任何内容 我正在想象这样的事情 static EventHandler
  • 使用translateX()和translateY()时,窗格布局内的JavaFX文本与其他元素重叠

    下图是对正在发生的情况的描述 我有一个Pane其中包含一个Text我正在使用下面的代码来制作marquee like effect of the Text 所以当Pane没有足够的空间来显示文本 动画正在开始 文本必须来回移动 以便用户可以
  • 如何平滑拖动JavaFX多边形?

    我有一个多边形 三角形 我想让它可以用鼠标拖动 下面是我尝试过的代码 但是使用此代码我无法顺利拖动它 请让我知道如何才能使其顺利拖动 public void start Stage primaryStage throws Exception
  • JavaFX TabPane 禁用按键切换选项卡

    我有一个Tab有一些内容 ScrollBar和别的 The ScrollBar has event handler for keys left and right 但如果我按下这些按钮Tabs被切换 因为TabPane还有一个密钥处理程序
  • 我在使用 JavaFX 绘制十字时遇到问题

    我正在尝试编写代码 在网格上对角绘制 3 个形状 前两个形状是正方形和圆形 我能做到 然而 第三种形状让我有些悲伤 我应该画一个十字 T 版本 而不是 X 每次我写出代码时 它看起来就像一个侧面 我知道我只是错过了一些简单的东西 但我真的很
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • 将 JavaFX 按钮放置在特定位置

    我的问题是如何将 javafx 按钮放置在特定位置 我一直尝试执行这个简单的代码 结果是按钮仅位于屏幕中心 而不是我想要的位置 我正在使用 StackPane Code Button button new Button button set
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 如何设置菜单按钮和菜单项的样式

    我尝试更改菜单按钮中的样式 我可以更改菜单按钮样式 但不能更改其菜单项 无论我尝试什么 菜单按钮内的菜单项都保持不变 menu button fx background color black menu button label fx ba

随机推荐

  • 如何使用DataContext.ExecuteCommand并获取执行的存储过程返回值?

    在c 项目中 我调用存储过程如下 System Data Linq DataContext dataContext MembershipContext GetContext connectionString int returnValue
  • C++ 删除字符串对象

    我的 C 程序中有一个字符串对象 声明如下 string str 我已经将一些数据复制到其中并做了一些操作 现在我想从内存中删除str对象 我无法使用删除运算符 因为 str 不是指针 如何从内存中删除该对象以回收分配给它的内存 谢谢 拉凯
  • 如何在 PHP 中解析和处理 HTML/XML?

    如何解析 HTML XML 并从中提取信息 Answer recommended by PHP Collective 原生 XML 扩展 我更喜欢使用其中之一原生 XML 扩展因为它们与 PHP 捆绑在一起 通常比所有第 3 方库更快 并为
  • python 从字符串创建切片对象

    我想从字符串创建一个切片对象 现在唯一的方法似乎是通过繁琐的 eval 语句 class getslice def getitem self idx return idx 0 eval getslice s 1 1 提前致谢 Edit 抱歉
  • 如何将 LatLng 实例发送到新意图

    我需要将 LatLng 类的实例传递给另一个意图 我该怎么做呢 这是代码 LatLng fromPosition new LatLng 23 4555453556 11 145315551 LatLng toPosition new Lat
  • Git Stash 和 Worktree 问题

    我很难让 Git 与我现有的用户定义工作树合作outside包含我的 git 目录的文件夹 基本上设置是这样的 我有两个目录 一个名为 git worktree 其中包含我想要跟踪的文件 另一个名为 git dir 其中包含存储库的 git
  • Android 中的假电话

    HI all 我想在android中开发一个假电话应用程序 单击按钮后 我必须在给定时间段内收到假电话 有什么办法可以做到这一点吗 有任何线索或示例代码 请让我知道 提前致谢 安卓是开源的 用它 In the git 存储库上的手机应用程序
  • Flutter - 在没有 Firebase 身份验证的情况下将 Firebase 通知推送给特定用户

    我正在使用 Firebase 来推送通知 并且我不在我的应用程序上使用 Firebase 身份验证 我有自己的系统 我没有找到这个问题的答案 是否可以在没有 Firebase 身份验证 因此没有 UID 的情况下使用 Firebase 将通
  • 每个 DocumentStore 的 WaitForNonStaleResults

    有没有办法告诉RavenDb对某些DocumentStore或DocumentSession的所有查询使用WaitForNonStaleResults模式 您可以使用DefaultQueryingConsistency Consistenc
  • 如何使用python和Opencv读取视频文件

    我正在使用 python 2 7 和 opencv2 4 读取 avi 文件 我使用的是 windows 10 我的示例代码是 import numpy as np import cv2 cap cv2 VideoCapture video
  • 将 ObjectMapper 声明为 bean 有什么好处?

    假设我只想要一个简单的实例ObjectMapper目的 将其声明为 bean 有什么好处吗 Bean public ObjectMapper objectMapper return new ObjectMapper 为什么不直接制作一个新的
  • 扫描仪与 BufferedReader

    据我所知 在Java中从文件中读取基于字符的数据的两种最常见的方法是使用Scanner or BufferedReader 我也知道BufferedReader通过使用缓冲区来有效地读取文件 以避免物理磁盘操作 我的问题是 Does Sca
  • 阻止 OS X 使用 Python 进入睡眠状态?

    有没有办法防止运行 OS X 的计算机在 Python 脚本中进入睡眠状态 您可以使用内置的咖啡因酸盐命令 subprocess Popen caffeinate 这就是我的使用方式 import sys import subprocess
  • 如何提高 IIS / ASP.Net 的启动性能

    我正在使用一个特别慢的虚拟网络主机 名称保留 其中磁盘性能可能非常糟糕 因此 第一次访问我的 ASP Net 网站可能需要 1 分钟以上的时间才能加载 初始加载后 一切都在 RAM 中 一切正常 我想知道是否有人知道如何指示 IIS 预加载
  • Epplus SetPosition图片问题

    我在用Epplus库在 Asp Net C 中生成 Excel 2010 及更高版本兼容的文件 我使用的是目前最新的版本 3 1 2 在添加任何图片之前 我首先设置行高 ExcelPackage pck new ExcelPackage v
  • IdHttp 只需获取响应代码

    我正在使用 idhttp Indy 进行一些网站检查 我想要它做的就是在发送请求后检查服务器的响应代码 我不想实际上必须从服务器接收 HTML 输出 因为我只监视 200 OK 代码 任何其他代码意味着存在某种形式的问题 我查阅了 idht
  • iPad 方向更改问题

    我的 iPhone 应用程序在 iPad 上运行时显示一些关于支持方向更改的奇怪行为 该应用程序以视图控制器 为了论证起见 将其称为视图 A 和导航控制器启动 并且 shouldAutorotateToInterfaceOrientatio
  • 如何获取 WPF 窗口的静态引用?

    我尝试了很多方法来在程序中获取窗口的静态引用 我需要在运行时从不同的类访问其所有成员 因此需要静态引用 我想要的是类似的东西Program Window1 where Core是静态的并且MyWindow是其静态成员之一 在 WinForm
  • 如何在应用程序启动时运行回调?

    我知道 Android 的 Activity 模型与我通常认为的 应用程序 有点不同 当我的应用程序 启动 时 我想做一些事情 在这种情况下 检查服务器上的一些通知并显示它们 如果可用 实现这一目标的好方法是什么 我可能不想在活动的 OnC
  • FX 19 中组合框焦点问题

    升级到最新的 JavaFX 版本 19 后 我遇到了一些奇怪的问题 如果我将最后一个选项设置为 ComboBox 中的值 那么在第一次打开时 如果我选择任何选项 下拉列表将不会隐藏 之后 下拉菜单将像往常一样工作 奇怪的是 只有当我将最后一