javafx响应式布局_JavaFX的响应式设计

javafx响应式布局

使用CSS技术,为您的网站创建响应式设计相对容易。 根据屏幕的大小,您可以使用其他CSS文件和布局。 在JavaFX中,乍一看似乎有些困难,因为CSS仅负责样式,而不负责布局。 但是,为各个屏幕尺寸使用不同的FXML文件并共享一个控制器实际上并没有那么糟,因此您可以轻松地使用SceneBuilder来预览不同屏幕尺寸的布局。 在代码中,您可以根据屏幕大小在FXML文件之间进行切换,也可以通过根据目标设备创建不同的部署并在构建过程中复制所需的文件来摆脱这种情况。

但是,响应式设计不仅与尺寸有关。 对于启用触摸的设备,同样要使用正确的控件,这一点很重要。 在JayDay上,Jim Weaver很好地介绍了如何使用JavaFX创建支持触摸的UI。 您可以从JayDay网站上下载演示文稿: JayDay 2013 。 他提出的目的之一是使用分页控件,该控件比TabPane易于在触摸设备上使用。

不幸的是,这不能与我们重用控制器的方法很好地配合使用,因此我们必须为具有常见内容和用途的控制器创建一个基类。

@FXML private Pagination pager

用于触摸设备和

@FXML private TabPane pager

如果应用程序在桌面上运行。

Paru Somashekar在JavaONE与Jonathan Giles的演讲中所展示的那样,如果我们能够简单地通过CSS切换外观,那就更好了。 在此演示中,她展示了CheckBox的替代外观,可以通过CSS轻松设置(大约27:15):

因此,您可以专门为具有CSS的触摸设备创建部署,或者使用类似的方法来确定设备是否支持触摸:

PlatformImpl.isSupported(ConditionalFeature.INPUT_TOUCH);

我决定自己尝试一下,然后将我创建的ChoiceWheel控件转换为ChoiceBox的外观:

对于基于FXML / CSS的方法,我不会像Paru那样通过每个CheckBox上的样式类来设置样式,而是为所有控件启用替代的Skin。 对于我所有的ChoiceBoxes:

.choice-box {
-fx-skin: "de.eppleton.controls.choicewheel.ChoiceBoxSkin";
}

无需对控制器进行任何更改。 我认为这是一种创建在台式机,平板电脑或手机上看起来都不错的应用程序的好方法,它显示了FXML和CSS的优势。 每个设备大小都有一个CSS-FXML对,您可以:

  • 根据每个设备组织布局
  • 在SceneBuilder中的不同设备上轻松预览设计
  • 通过CSS在不同的控件(触摸/鼠标)之间切换
  • 重用同一控制器
  • 创建仅包含目标设备所需文件的部署

对于常规控件,拥有更多这些经过触摸优化的皮肤真的很棒。

参考: Eppleton博客上我们JCG合作伙伴 Toni Epple的JavaFX响应式设计 。

翻译自: https://www.javacodegeeks.com/2013/09/responsive-design-with-javafx.html

javafx响应式布局

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pojo java_什么是POJO,JavaBean?

什么是POJO,JavaBean?总结:POJO:一个简单的Java类,这个类没有实现/继承任何特殊的java接口或者类,不遵循任何主要java模型,约定或者框架的java对象。在理想情况下,POJO不应该有注解。…

JVM体系结构101:了解您的虚拟机

Java虚拟机(JVM)架构和Java字节码101的初学者速成班 Java应用程序无处不在,它们在我们的手机,平板电脑和计算机上。 在许多编程语言中,这意味着要多次编译代码才能使其在不同的OS上运行。 对于作为开发人员的我们来说…

flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查

Flask-SQLAlchemy对数据库增删改查安装pip install flask-sqlalchemy具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释app.route(/)def index():#增加article1 Article(titletest1, contentthe first test)db.session.add(arti…

逸出 java_【java】知识系谱-基础篇-线程-发布、逸出

java并发编程实战的解释,不够详细,尤其this引用逸出让人理解有些费解,java并发编程实战里面的内容就直接拷贝过来发布:使对象能够在当前作用域之外的代码中使用逸出:当某个不该被发布的对象被发布时,这种情…

lambda java_Java Lambdas简介

lambda javaJava 8的主题是lambdas。 我已经注意到,对于许多Java程序员来说,lambda都是非常难的材料。 因此,让我们尝试对它们有一个基本的了解。 首先,lambda到底是什么? Lambda是一个匿名函数,与常规函数…

java mousepress_Java线程原语弃用

为什么是线程停止不赞成?因为它本质上是不安全的。停止线程会使其解锁其锁定的所有监视器。(当ThreadDeath异常在堆栈上传播时,监视器将被解锁。)如果以前受这些监视器保护的任何对象处于不一致状态,其他线程现在可能会以不一致的状态查看这些…

带有Jersey的JAX-RS教程,用于RESTful Web服务

在当今世界,数据扮演着非常重要的角色。 如此众多的应用程序将各种类型的数据用于不同的操作,所以最重要的方面是应用程序之间的通信。 当应用程序可以通信时,它们之间的数据共享变得容易。 就像在亚洲运行的应用程序向在欧洲运行的应用程序…

java swing 打开文件_java swing实现打开Excel文件并进行处理

这里选择Excel文件是业务需要,话不多说1、引入对Excel处理的相关依赖org.apache.poipoi3.16org.apache.poipoi-ooxml3.162、进行swing的相关布局代码:package com.mozarta;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.xssf.usermodel…

@ParameterizedTest在@CvsSource中具有空值

在JUnit 4中编写参数化测试非常麻烦。 JUnit 5对框架进行了一些有用的改进,并且使用不同的参数运行相同的测试比以前的版本要简单得多。 但是,在这样的参数中传递空值存在一个小问题。 在这篇文章中,我将向您展示如何在JUnit 5中的Parametrz…

java正则断言_Java正则表达断言篇

正则表达式的先行断言和后行断言一共有4种形式&#xff1a;(?pattern) 零宽正向先行断言(zero-width positive lookahead assertion)(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)(?<pattern) 零宽正向后行断言(zero-width positive lookbehin…

java的对象对象映射_Java对象到对象映射器

java的对象对象映射我在该项目上使用了Dozer一段时间。 但是&#xff0c;最近我遇到了一个非常有趣的错误&#xff0c;这促使我环顾四周&#xff0c;并尝试使用其他“对象到对象”映射器。 这是我找到的工具列表&#xff1a; 推土机&#xff1a;推土机是Java Bean到Java Bea…

java parallelstream_关于Java8 parallelStream并发安全的深入讲解

背景Java8的stream接口极大地减少了for循环写法的复杂性&#xff0c;stream提供了map/reduce/collect等一系列聚合接口&#xff0c;还支持并发操作&#xff1a;parallelStream。在爬虫开发过程中&#xff0c;经常会遇到遍历一个很大的集合做重复的操作&#xff0c;这时候如果使…

Jakarta EE,EE4J和Java EE之间的关系

Jakarta EE的名称已经存在了一个多月&#xff0c;即使Mike Milinkovich在他的博客文章“名称是……”中很好地解释了名称和概念&#xff0c;但对于它们之间的关系仍然有些困惑&#xff0c;我也提出了疑问只要有话题就可以围绕它。 我试图在这里总结一下。 希望能帮助到你&#…

java readline 超时_跳过Java中的BufferedReader readLine()方法

是否有一种简单的方法可以跳过java中的readLine()方法(如果它花费的时间超过2秒)&#xff1f;这是我问这个问题的背景&#xff1a;public void run(){boolean looping true;while(looping) {for(int x 0; xtry {Comm s clientList.get(x);String str s.recieve();// code t…

minwindow java_Java经典算法:最小窗口子字符串

给定一个字符串S和一个字符串T&#xff0c;找到S中的最小窗口&#xff0c;其中将包含T中所有字符的复杂度为O(n)。例如&#xff0c;S “ ADOBECODEBANC”&#xff0c;T “ ABC”&#xff0c;最小窗口为“ BANC”。Java解决方案public String minWindow(String s, String t) {Ha…

j2ee可以用于前端开发吗_用于J2EE开发的Cloud IDE

j2ee可以用于前端开发吗随着许多传统软件工具进入云计算&#xff0c;我想看看它们与传统工具的比较。 我的兴趣是J2EE技术​​&#xff0c;并开始寻找一种云服务&#xff0c;该服务使我能够开发&#xff0c;测试和部署J2EE应用程序。 我很快发现&#xff0c;许多云IDE是为Web前…

java为什么全是乱码_java一切乱码的解释 以及源头

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼InputStreamReader in new InputStreamReader(new FileInputStream(“demo.txt”),”UTF-8”);给InputStreamReader指定解码编码&#xff0c;这样二者统一就不会出现乱码了。下面说说字符输出流。字符输出流的原理和字符输入流的原…

JAVA连接数据库ij_Derby 客户端 ij使用

Derby是开源的、嵌入式的Java数据库程序&#xff0c;ij是Derby提供的客户端工具&#xff0c;相当于其他数据库提供的sqlplus工具。ij是纯Java的程序&#xff0c;不用安装&#xff0c;使用起来就像运行普通的Java应用程序一样。接下来说下&#xff1a;如何使用ij工具去操作数据库…

使用Google Cloud Storage托管您的Maven工件

如果您使用Google Cloud并将Java用于项目&#xff0c;那么Google Cloud Storage是托管团队工件的理想场所。 它很容易设置&#xff0c;而且很便宜。 如果您对它们的功能不特别感兴趣&#xff0c;那么它比设置现有存储库选项&#xff08;jfrog&#xff0c;nexus&#xff0c;arc…

java+map对象判断空值_java判断map中是否存在指定对象

Map判断是否包含指定的value使用containsValue方法。(推荐&#xff1a;java视频教程)定义containsValue(Object value) 如果此映射将一个或多个键映射到指定值&#xff0c;则返回 true示例&#xff1a;/**** Map集合判断是否包含value**/public class MapDemo{public static vo…