首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >分页控制的焦点内容节点

分页控制的焦点内容节点
EN

Stack Overflow用户
提问于 2014-10-17 02:55:44
回答 1查看 337关注 0票数 0

我有一个ListView作为JavaFX分页控件的内容节点。我的目标是在选择新页面后将焦点设置为ListView。我的方法的问题是,有时ListView有焦点,但有时没有。

在选择了新页面之后,如何确保ListView具有焦点?

平台: Windows 7 JDK 1.8.0.25 (64位)

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package test.focus;

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.Pagination;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class MainApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Pagination pagination = new Pagination(5);
        final ObservableList<String> texts = FXCollections.observableArrayList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
        final ListView<String> textsListView = new ListView<>();
        pagination.setPageFactory(new Callback<Integer, Node>() {

            @Override
            public Node call(Integer page) {
                textsListView.setItems(FXCollections.observableArrayList(texts.subList(page, page + 2)));
                textsListView.getSelectionModel().select(0);
                // Platform.runLater does not work, too
                textsListView.requestFocus();
                return textsListView;
            }
        });

        BorderPane root = new BorderPane(pagination);
        Scene scene = new Scene(root, 800, 600);

        stage.setTitle("Focus issue");
        stage.setScene(scene);
        stage.show();
    }

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

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 04:27:28

你需要做两件事才能把注意力始终放在清单上:

  • pagination不应该是焦点遍历周期的一部分。
  • 每次列表失去焦点时,它都应该再次请求它。

这对我来说很管用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    final ListView<String> textsListView = new ListView<>();
    textsListView.focusedProperty().addListener((ov,b,b1)->{
        if(!b1){
            textsListView.requestFocus();
        }
    });

    pagination.setFocusTraversable(false);
    pagination.setPageFactory(page -> {
        textsListView.setItems(
            FXCollections.observableArrayList(texts.subList(page, page + 2)));
        textsListView.getSelectionModel().select(0);

        textsListView.requestFocus();           
        return textsListView;
    });

编辑

为了避免每次焦点丢失时列表请求焦点,此方法只在加载新页面时才请求列表焦点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    final ListView<String> textsListView = new ListView<>();
    final BooleanProperty loaded=new SimpleBooleanProperty(false);         

    pagination.setFocusTraversable(false);
    pagination.setPageFactory(page -> {
        textsListView.setItems(
             FXCollections.observableArrayList(texts.subList(page, page + 2)));
        textsListView.getSelectionModel().select(0);

        loaded.set(true);
        return textsListView;
    });

    loaded.addListener((ov,b,b1)->{
        if(b1){
            textsListView.requestFocus();
            loaded.set(false);
        }
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26423496

复制
相关文章
【Java】 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、ArrayIndexOutOfBoundsE
今天工作中,临时Fix一个bug,一看日志“java.lang.ClassCastException: null” 相当懵逼,没有详细堆栈信息,这咋整。虽然根据上下文可以推测问题代码的大致位置,但不敢拍板啊。只好google找一下,在Stackoverflow上果然有解决办法
NaughtyCat
2020/10/09
9060
ClassCastException。
这个错误也很常见,通常在程序中出现强制类型转换时出现这个错误,如下面这段代码所示:
全栈程序员站长
2022/09/30
3310
ClassCastException。
java.lang.ClassCastException(java强制类型转换异常)
ClassCastException,从字面上看,是类抛出异常,即是类型转换错误,通常是进行强制类型转换时候出的错误。如下图所示:
黑泽君
2018/10/11
44.8K0
java.lang.ClassCastException(java强制类型转换异常)
如何使用 Java 泛型来避免 ClassCastException
泛型是相关语言特性的集合,它允许类或方法对各种类型的对象进行操作,同时提供编译时类型安全性检查
Java宝典
2021/01/28
2.2K0
Java 继承关系中的 java.lang.ClassCastException 错误
但是在继承对象之间的强制转换可能会遇到 java.lang.ClassCastException 异常的错误。
HoneyMoose
2022/01/22
1.5K0
Java 继承关系中的 java.lang.ClassCastException 错误
stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]
发现逻辑上是完全没有问题的,报错是第二行代码,又看了下日志,终于发现了问题的原因:
全栈程序员站长
2022/09/30
1.5K0
stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]
深入分析ClassCastException
ClassCastException时常见,只要两个不同类强转换就会有这种问题,不过下面这种错误不知道见过没
PhoenixZheng
2018/08/07
6380
java:组播通讯示例
在局域网内,组播通讯还是很有用处的,以下代码基于MulticastSocket类进一步封装更加方便的实现组播数据发送和组播数据接收功能。
10km
2019/07/12
1.5K0
java (多网卡环境下)发送组播广播(multicast/broadcast)失败问题
java发送组播或广播包并不复杂网上有很多文章,比如下面的两篇: 《Java实现组播(multicast)简单例子》 《Java 网络编程案例:使用 MulticastSocket 实现多点广播》 这些例子都大同小异,拿来就可以用,我刚开始使用组播/广播时就是这样抄个例子,编译,运行,收到消息—完美
10km
2020/09/07
3.8K0
java (多网卡环境下)发送组播广播(multicast/broadcast)失败问题
java.lang.ClassCastException: java.lang.String cannot be cast to com.qbz.entity.TblUser
在Hibernate HQL 查询中,有时候会遇到 ---- java.lang.ClassCastException: java.lang.String cannot be cast to com.
qubianzhong
2018/08/10
9680
java.lang.ClassCastException: java.lang.String cannot be cast to com.qbz.entity.TblUser
nested exception is java.lang.ClassCastException:XXX cannot be cast to java.io.Serializable
程裕强
2018/01/02
2K0
如何让短视频做到”秒播“?(下)
前面我们讲到,如果要让短视频做到”秒播“的话,可以从域名解析、socket buffer、Probe buffer入手,对短视频小视频源码进行优化,那么我们今天来把剩余的几个方面介绍完。
云豹通讯员
2020/03/18
1.9K0
如何让短视频做到”秒播“?(下)
组播、单播、多播
主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。
233333
2019/05/25
1.6K0
ClassCastException深入分「建议收藏」
技术历程:http://www.blogjava.net/flyingis/archive/2005/12/18/24514.html
全栈程序员站长
2022/09/30
4830
spring-boot-devtools cannot be cast to类型转换异常java.lang.ClassCastException
在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。 同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。 DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。
小贝壳
2020/03/05
4K0
“单播”、“组播”和“多播”
摘自"百度知道",我不知道! 当前的网络中有三种通讯模式:单播、广播、组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。 一、单播: 主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。 如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。 但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。 网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。 单播的优点:
菩提树下的杨过
2018/01/23
3.3K0
list强转数组抛异常-ClassCastException
toArray(new String[0]), 创建一个大小为0的数组,当为输入数组长度小于集合size时,toArray方法会自动创建一个等大数组放入数据并返回。 toArray(new String[100000]),同上输入的10w数组比集合size小,toArray方法会重新创建一个等大数组放入数据并返回,原来的10w数组等于白建了 toArray(new String[1000000]),输入数组长度与集合size相等,当是一个理想状态时,即数组size没有发生变化(比如没有并发情况),那么toArray方法会直接使用输入数组并返回,但如果在输入数组创建之后,原集合size发生了变化,最糟糕的情况会退化为#2 toArray(new String[2000000]),输入数组长度大于集合size,那么toArray方法会直接使用输入数组并返回,当然多出去的那部分数组量就算浪费了
用户1503405
2021/10/06
5080
Java 关于策略模式+简单工厂模式下的思考
  最近在做公司一个消息网关的服务,包括:短信、微信、邮件等,所有请求通过一个入口,方便接口的管理(记录日志、接口限流白名单啥的)。如何写这个接口呢,还有为了以后扩展,对接过短信、微信、公众号的童鞋大概都了解,首先定义一个模板,然后后台传入json,替换模板中的值,然后发送。设计框架大概思路是这样的
huofo
2022/03/18
5190
Java 关于策略模式+简单工厂模式下的思考
关于java
大整数10进制转16进制问题 google了都没什么好的解决方法,因为要转换的十进制有300多位,long都装不下,没有直接可用的函数可以拿来用 王总的方法分享之: 思路:转换10进制字符串为大整数 ,大整数放入字节流,每个字节转换为16进制,有空位补零 代码: import java.math.BigInteger; public static String convertDecimalToUpperHexStr(String decimalStr){ BigInteger bi = new Bi
架构师刀哥
2018/03/20
8890
Java Spring 使用AOP代理方法 类型转换异常java.lang.ClassCastException 原因及解决办法
有一段代码 有时会出现类型转换异常 很诡异 排查原因发现是spring aop造成的。
heasy3
2021/01/29
1.1K0

相似问题

将pgAdmin3连接到Heroku postgreSQL DB时出现SSL错误

11

将Heroku Postgres DB连接到水壶

117

连接到Heroku PostgreSQL - SSL问题

10

五角壶汤匙日期操作

23

将excel输出分组到五合水壶汤匙中

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文