JavaFx自定义Tab-Order
title: JavaFx自定义Tab-Order
Tab-order是什么?在界面上当你按tab键触发焦点转移的功能,这就是tab order。但是Javafx有个缺陷就是不方便自己设置tab-order的顺序。
15年JDK爆出这个bug,有人提过:
最后JDK中迫不得已临时把Parent类中的私有方法setImpl_traversalEngine设置为了public,让用户可以设置Node自己的tab-order顺序。
相关解决方案 stackoverflow
示例:
- fxml文件
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import java.net.URL?>
<BorderPane fx:id="root" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="com.cmlanche.easymvvmfx.ui.login.LoginView">
<center>
<Label style="-fx-font-size: 32" text="hello world"/>
</center>
<bottom>
<VBox fx:id="testbox">
<Button fx:id="btn" text="tray">
</Button>
<TextField fx:id="t1"/>
<TextField fx:id="t2"/>
<TextField fx:id="t3"/>
</VBox>
</bottom>
</BorderPane>
- Controller文件
package com.cmlanche.easymvvmfx.ui.login;
import com.fx.base.mvvm.BaseView;
import com.sun.javafx.scene.traversal.Algorithm;
import com.sun.javafx.scene.traversal.Direction;
import com.sun.javafx.scene.traversal.ParentTraversalEngine;
import com.sun.javafx.scene.traversal.TraversalContext;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import tray.notification.NotificationType;
import tray.notification.TrayNotification;
/**
* Created by cmlanche on 2016/12/9.
*/
public class LoginView extends BaseView<LoginViewModel> {
@FXML
Button btn;
@FXML
TextField t1;
@FXML
TextField t2;
@FXML
TextField t3;
@FXML
VBox testbox;
@Override
protected void onViewCreated() {
t2.setFocusTraversable(true);
t2.requestFocus();
testbox.setImpl_traversalEngine(new ParentTraversalEngine(testbox, new Algorithm() {
@Override
public Node select(Node owner, Direction dir, TraversalContext context) {
if ("t2".equals(owner.getId())) {
return t3;
} else if ("t3".equals(owner.getId())) {
return t1;
} else if ("t1".equals(owner.getId())) {
return btn;
} else {
return t2;
}
}
@Override
public Node selectFirst(TraversalContext context) {
return t2;
}
@Override
public Node selectLast(TraversalContext context) {
return t1;
}
}));
}
}
原来的tab-order顺序是btn->t1->t2->t3,现在的顺序是t2->t3->t1->btn。

需要注意的是
setImpl_traversalEngine是deprecated方法,以后可能废弃的apiLoginView是我的框架easyMvvmFx构建的控制器,不能直接放在你代码中运行。
欢迎加我的qq群探讨JavaFx 最大最活跃的JavaFx社群 518914410
JavaFx自定义Tab-Order的更多相关文章
- 孙鑫视频学习:VS2010中找不到【Tab order】菜单项
在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...
- Android: 自定义Tab样式,一种简单的方式。
之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法. 1.制作4个9patch的tab样式,可参考android默认的资源 tab_unselected.9.pn ...
- vs 2015工具栏添加Tab Order
1. 在工具栏右键,弹出菜单,选中“Customize”菜单项. 2. 选中Commands标签页,选择Toolbar,选择自己要加入的Tab order的类别,之后点击“Add Command”按钮 ...
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...
- ionic ion-tab图标修改, 自定义tab图标
遇到需要自定义tab图标很简单, 只需要自定义相应的css就可以了, 这里要注意的是如何调整背景图片的大小. <ion-view hide-back-button="false&quo ...
- TabLayout自定义tab,实现多样导航栏
代码地址如下:http://www.demodashi.com/demo/14660.html 前言 之前有讲过TabLayout的一些知识, TabLayout实现顶部导航(一) TabLayout ...
- [网页游戏开发]容器的使用及自定义Tab,RadioGroup,List,ViewStack
Morn里面,容器和其他普通组件不同,无需皮肤,所以也不能从组件树种拖动创建(Tab,RadioGroup例外),只能转换而来 Morn的容器组件主要有Box,Container,Panel,Tab, ...
- 自定义SWT控件六之自定义Tab
6.自定义tab 本章节提供的自定义tab 分为两类 tab上带删除按钮和添加按钮,可删除tab和添加tab tab不可删除和添加 6.1 不可删除tab package com.view.contr ...
- Vue可自定义tab组件
在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间. 如何 ...
随机推荐
- springmvc框架原理
1. 用户发送请求至前端控制器DispatcherServlet 2. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3. 处理器映射器根据请求url ...
- 更改服务器的SID 加入域控制器提示SID重复
启动Windows2008.2012进入系统后,打开“CMD窗口”并进入到"C:\windows\system32\sysprep"目录后再输入“sysprep /generali ...
- macaca环境搭建(web 和 android)
一.安装配置JDK 1.1下载JDK地址http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- Hive(笔记)
(2015.07.22Hive笔记) 一.Hive的安装 1.1Hive的安装过程 下载hive源文件(apache-hive-0.14.0-bin.tar.gz ) 解压hive文件 进入$HIVE ...
- 用excel.php类库导出excel文件
excel.php是个小型的php类库,可以满足基本的从数据库中取出数据然后导出xls格式的excel文件,代码如下: 1 class Excel { 2 public $filename = 'ex ...
- ASP.NET Core MVC 源码学习:详解 Action 的激活
前言 在 上一篇 文章中,我们已经学习了 ASP.NET Core MVC 的启动流程,那么 MVC 在启动了之后,当请求到达过来的时候,它是怎么样处理的呢? 又是怎么样把我们的请求准确的传达到我们的 ...
- synchronized关键字
最近重新梳理了下java的synchronized相关内容,希望能帮助到有需要的朋友们. 主要阐述以下几个问题: 1.非static方法前加synchronized class Demo{ synch ...
- JDK中日期和时间的几个常用类浅析(四)
java.time.Instant java.time.Instant类对应的是时间线上的一个时间点.该类通过保存着从格林威治的起始时间(1970年一月一日零点零分)开始计算所经过的纳妙数来表示时 ...
- Apache优化
控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换.进程间的数据交换会占用很大内存,数据交换产生的滞后使用户总感觉"不够快",所以用户就可能去按"停止 ...
- Fiddler抓取https原理?
参考:http://blog.csdn.net/xoopx/article/details/51577039 首先fiddler截获客户端浏览器发送给服务器的https请求, 此时还未建立握手.第一步 ...