JavaFX应用举例

JavaFX目前是JDK8自带的一套UI框架(jfxrt.jar),相比AWT和SWING,它的文档相对更完整完善了,控件使用更为清晰简单,最重要的是作为Java客户端UI开发框架他和CSS兼容,作出的界面更为美观符合潮流。


oracle上有专门的DEMO程序(库)、API、控件css说明等比较详细的文档和下载。https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html。


以下是自学的示例UI程序:

 

 

package com.merrick.japanese;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.Stage;

public class JaToCnFx extends Application {

	
	/**
	 * 控件
	 * */	
	private TabPane frametab;	
	private Tab jatocntab;
	private Tab cntojatab;	
	
	/**
	 * 方法
	 * */	
	@Override
	public void start(Stage stg) throws Exception {
		

		frametab = new TabPane();
		frametab.setPrefSize(800, 475);
		frametab.setMinSize(TabPane.USE_PREF_SIZE, TabPane.USE_PREF_SIZE);
		frametab.setMaxSize(TabPane.USE_PREF_SIZE, TabPane.USE_PREF_SIZE);
		frametab.setSide(Side.TOP);
		frametab.setRotateGraphic(false);
		frametab.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
		jatocntab = new Tab();
		jatocntab.setText("「日本語」->「中国語」");
		jatocntab.setStyle("-fx-font-size: 15px;");		
		
		
		cntojatab = new Tab("【中文】->【日文】");
		cntojatab.setStyle("-fx-font-size: 15px;");
		frametab.getTabs().add(jatocntab);
		frametab.getTabs().add(cntojatab);		
		
		
		JaToCnTab jtc = new JaToCnTab();
		jatocntab.setContent(jtc.createJAtoCNpane());	
		
		CnToJaTab ctj = new CnToJaTab();
		cntojatab.setContent(ctj.createCNtoJApane());		
						
		//Scene sc = new Scene(gp,800,475);
		Scene sc = new Scene(frametab,800,475);		
		
		/**CSS样式加入*/
		sc.getStylesheets().add(JaToCnFx.class.getResource("/com/merrick/japanese/fx.css").toExternalForm());	
						
		stg.setTitle("Vocabulary Translation test");
		stg.setScene(sc);
		stg.show();			
		
	}
	

	public static void main(String[] args) {		
		launch(args);
	}
	
	
		
	public static List<Integer> getRandomIntsSerialNoRepeated(int maxelem) {
		/***
		 * 生成随机序列,不重复(和初始集合内容顺序有关)
		 * */

		int size = maxelem;
		List<Integer> tmplst = new ArrayList<Integer>();		
		int rx = 0;	
		Random rn = new Random();
		for (int i = 0; i < size; i++) {						
			if(tmplst.size()!=0) {				
				do {
					rx = rn.nextInt(size);				
				}while(tmplst.contains(rx));					
				tmplst.add(rx);		

			}else {				
				rx = rn.nextInt(size);			
				tmplst.add(rx);		

			}								
		}		
		return tmplst;		
	}
	
}



package com.merrick.japanese;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;

public class CnToJaTab {
	public static final int CURRENT_LESSON_MAX = 9;
	
	private boolean onoff = false;//启停按钮状态flag	
	
	private String currentcn = null;//
	
	private int currentlesson = 1;	//课程词汇对应编号		
	
	private static Properties cntoja = new  Properties(); //lesson词汇文件,key:中文,value:日文(已加载,当前)	
	
	private int testorder = 0; //当前测试的词汇数量
	
	private List<Integer> lst_order = null;//指定lesson,初始生成测试词汇的顺序,和词汇prop文件中行数有关
	
	private String[] keyarr = null;//词汇prop的键值构成的数组
	
	
	public void loadVocabularyViaLessonnumberCNtoJA(int lesson) {
		try {
			cntoja.clear();
			cntoja.load(JaToCnFx.class.getResourceAsStream("/com/merrick/chinese/props/lessoncn"+ String.valueOf(lesson) +".properties"));
		} catch (IOException e) {
			System.err.println(e.toString());
		}
		
	}
	
	
	public Parent createCNtoJApane() {
		GridPane gp = new GridPane();				
		gp.setHgap(15);
		gp.setVgap(15);
		gp.setPadding(new Insets(35,35,35,35));
		//构建中到测试页面控件
		
		Text title = new Text("Show Chinese, fill Japanese:");	//题头	控件
		title.setStyle("-fx-fill:linear-gradient(to top left, blue,red );-fx-font-size: 15px;");
		
		Label lb_lesson = new Label("Choose Lesson:");//下拉框标签
		lb_lesson.setStyle("-fx-font-weight:bold;-fx-font-size:13px;");		
		
		ChoiceBox<String> cb_lesson = new ChoiceBox<String>(); //下拉框控件
		cb_lesson.setPrefWidth(100);
		ArrayList<String> items = new ArrayList<String>();
		for (int i = 1; i <= CURRENT_LESSON_MAX; i++) {
			items.add(String.valueOf(i));
		}
		cb_lesson.getItems().addAll(items);//可见内容
		cb_lesson.getSelectionModel().select(currentlesson-1);//初始
		cb_lesson.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> arg0, Number oldval, Number newval) {
				
				currentlesson = newval.intValue() + 1;
			}			
		});
		
		Button btn_start = new Button("Press to Start Lesson ");//开始按钮控件	
		
		Label cnname = new Label("Chinese:"); //当前中文的标签
		Text cntxt = new Text(); //当前中文(动态)控件
		cntxt.setStyle("-fx-font-weight:bold;-fx-font-size:13px;");
		cntxt.setText("");
		
		Label input = new Label("Input:"); //输入框标签
		final TextField inputtxt = new TextField();//中文输入框控件
		inputtxt.setMinWidth(150);
		inputtxt.setMinSize(330, 15);
		input.setStyle("-fx-font-size:15px;");
		
		Button btn_valid = new Button("Validate");//验证按钮控件		
		
		Label lb_prog = new Label("Progress:");//下拉框标签
		
		ProgressBar prog = new ProgressBar(0);//进度控件
		prog.setPrefWidth(200);	
		
		final Text msgtxt_current = new Text();		//状态提示文字文本控件
		msgtxt_current.setText("");		
		//msgtxt_current.setStyle("-fx-font-weight:bold;-fx-font-size:15px;");
				
		final Text msgtx_torf = new Text(); //正确与否提示控件
		
		final Text msgtxt_correct = new Text(); //正确结果展示控件	
		msgtxt_correct.setStyle("-fx-font-weight:bold;-fx-font-size:15px;");
		
		EventHandler<ActionEvent> starttestAction = (ActionEvent event)->{
			loadVocabularyViaLessonnumberCNtoJA(currentlesson);
			testorder= 0;
			lst_order = JaToCnFx.getRandomIntsSerialNoRepeated(cntoja.size());
			keyarr = cntoja.keySet().toArray(new String[0]);
			getspecifiedVocabulary(currentlesson,cntoja.size(), testorder);
			cntxt.setText(currentcn);
			msgtxt_current.setText("    [LESSON "+currentlesson +", TOTAL:"+cntoja.size()+",CURRENT:"+(testorder)+"]");//
			prog.setProgress(1.0*testorder/cntoja.size());
			onoff = !onoff;
			if(onoff) {
				btn_start.setText("Going......");					
			}else {
				btn_start.setText("Press to Start Lesson ");	//"Lesson Start"
				msgtxt_current.setText("");
				cntxt.setText("");
			}
					
		};
		btn_start.setOnAction(starttestAction);
		
		EventHandler<ActionEvent> validaction = (ActionEvent event)->{
			String userinput = inputtxt.getText();
			String rightvalue = null;
			String key = currentcn;
			if (key==null)
				return;
			
			rightvalue = (String) cntoja.get(key);//特定map获取答案
			if(userinput.equals(rightvalue)) {
				msgtx_torf.setFill(Color.GREEN);
				msgtx_torf.setText("CORRECT INPUT.");						
			}else {
				msgtx_torf.setFill(Color.RED);
				msgtx_torf.setText("WRONG INPUT: " + userinput );		
			}
			msgtxt_correct.setText("[正确的结果]: "+key+"<====>"+ rightvalue);
			
			getspecifiedVocabulary(1,cntoja.size(),testorder);	
			msgtxt_current.setText("    [LESSON "+currentlesson +", TOTAL:"+cntoja.size()+",CURRENT:"+(testorder)+"]");
			prog.setProgress(1.0*testorder/cntoja.size());
			cntxt.setText(currentcn);	
			inputtxt.clear();
			
		};
		btn_valid.setOnAction(validaction);
		inputtxt.setOnKeyPressed(new EventHandler<KeyEvent>() {//输入框响应回车键
			@Override
			public void handle(KeyEvent kev) {
				if(kev.getCode() == KeyCode.ENTER) {
					validaction.handle((ActionEvent) btn_valid.getOnKeyPressed());
				}				
			}
		});
		
		gp.add(title, 		0, 0, 3, 1);
		
		gp.add(lb_lesson, 	0, 1, 1, 1);
		gp.add(cb_lesson, 	1, 1, 1, 1);
		gp.add(btn_start, 	2, 1, 1, 1);
		
		gp.add( cnname, 	0, 2, 1, 1);		
		gp.add( cntxt, 		1, 2, 1, 1);		
		
		gp.add( input, 		0, 3, 1, 1);
		gp.add( inputtxt, 	1, 3, 1, 1);
		gp.add( btn_valid, 	2, 3, 1, 1);		
		
		gp.add( lb_prog, 	0, 4, 1, 1);
		gp.add( prog, 		1, 4, 2, 1);
		
		gp.add(msgtxt_current,  	0, 5, 3, 1);
		gp.add(msgtx_torf,  	0, 6, 3, 1);
		gp.add(msgtxt_correct, 	0, 7, 3, 1);
		
		return gp;
	}
	
	
	public void getspecifiedVocabulary(int lesson, int len, int order) {
		if(order>=len) {
			return;
		}
					
		currentcn = keyarr[lst_order.get(order)];
			
		System.out.println(currentcn);
		testorder++;
	}

}

 

 

 

 

JavaFX项目基础应用 Graalvm打包javafx项目成exe JavaFX项目基础应用, Graalvm打包javafx项目成exe,Graalvm+Maven+javaFX之终极GUI编程 阅读详情

相关推荐

JavaFx教程-01初识javaFX

什么是JavaFX JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者用来设计、创建、测试、调试和部署富客户端程序,和Java一样跨平台。 JavaFX发展历程 2008年12月05日 Sun微系统公司今天正式发布了基于Java语言的平台JavaFX 1.0。因为当时富互联网应用(RIA,Rich Internet Application)正火,具有代表性的有:Adobe公司的Fle...

iMotherBoard的博客 1230

GUI技术:JavaFX基础方法及示例

JavaFX融入了现代GUI技术以方便开发富因特网(RIA),可以表现一般桌面应用具有的特点与功能。可以灵活地在桌面或者Web浏览器中切换运行。JavaFX为支持触摸的设备提供多点触控支持,如平板和智能手机。JavaFX具有内建的2D、3D、动画支持,以及视频和音频的回放功能。

这也是计划的一部分的博客 1942

JavaFX入门指南:我的第一个JavaFX应用程序

JavaFX 是 Java 平台上的新一代 GUI(图形用户界面)开发框架,旨在替代传统的 Swing 框架。它采用硬件加速渲染机制,支持丰富的图形效果、动画、多媒体播放等功能,适用于构建高性能、现代感十足的桌面应用程序。JavaFX 提供了基于场景图(Scene Graph)的架构,开发者可以通过节点(Node)构建复杂的 UI 结构,并支持 CSS 样式和 FXML 声明式界面设计。JavaFX 的核心模块包括等,构成了应用程序的生命周期管理、窗口系统集成以及界面元素布局的基础。

weixin_42571280的博客 2595

一个完整的JavaFx应用例子

在Java的官方文档中可以看到是推荐使用Scene Builder的。 这说明用sencebuilder来进行布局的构建是很有效率的。 从这里,我们可以直接下载SceneBuilder。 这里是如何关联SceneBuilder和IDEA开发环境。 具体如何使用请查看相关文档,有具体的使用方法。 在配置完以后,就可以使用了,因为是可见的拖拽方式,所以布局很方便。 这里需要注意的是,我们一定要参考官方...

潇洒小燕青的专栏 1万+

JavaFX支持插件在Eclipse环境下的应用

本文还有配套的精品资源,点击获取 简介:该简介介绍了特定版本的Eclipse开发插件“com.sun.javafx.eclipse.feature-win32-win32-x86-1.0.1”,它是为Windows 32位x86架构提供的JavaFX支持插件。此插件版本号1.0.1表明它是一个初始版本,主要功能包括支持JavaFX的Eclipse集成开发。JavaFX是一个...

weixin_42601702的博客 1363

WPS接入DeepSeek,实现AI辅助功能

总的来说,借助 WPS 中宏功能与 DeepSeek 大模型的结合,文档处理、内容创作和数据分析等任务都能更加智能化、自动化。这不仅大幅提升了工作效率,也为办公场景带来了全新的智能化办公体验。

运维老生常谈 3805

javaFx桌面程序开发代码示例

【代码】javaFx桌面程序开发代码示例。

weixin_44006009的博客 582

跨平台烧录实战:RKDevTool在Windows/Linux/MacOS下的统一与差异

本文详细解析了RKDevTool在Windows、Linux和macOS三大操作系统下的固件烧录实践,重点介绍了RK3576开发板的环境配置、工具链选择、烧录模式切换及常见问题解决方案,帮助开发者构建稳定可靠的跨平台烧录工作流。

cnn8visionary的博客 206

JavaFX应用

通过这个示例,你学习了如何在JavaFX应用中集成图表,为用户提供直观的数据可视化功能。在这个示例中,我们将向JavaFX应用中集成一个进度条,用来展示一个模拟的后台任务的完成进度。假设我们想要实现一个简单的场景:用户点击一个按钮开始一个耗时的任务,期间进度条会根据任务完成情况实时更新,任务完成后显示完成信息。通过这个示例,你学习了如何在JavaFX应用中实现拖放功能,这增强了用户界面的交互性,让用户能直接参与和控制UI元素的布局或排序。类安全地处理并发问题,保持UI的响应性和用户友好性。

hummhumm的专栏 1603

Valgrind 从入门到精通:内存调试和性能分析

Valgrind 提供了强大的 API,允许开发者编写自定义的检查工具。通过扩展 Valgrind,可以针对特定场景实现更精准的检测。

大模型大数据攻城狮的专栏 1217

【WRF湿度调整策略】WRF/ERA5湿度数据对比

【WRF湿度调整策略】WRF/ERA5湿度数据对比

WW、forever的博客 120

JavaFX布局详解与代码实例

:JavaFX是一种使用直观的方式为用户界面设计和布局的框架。本文将深入探讨JavaFX布局的原理、常用布局和代码示例,帮助读者更好地理解和应用JavaFX布局。

m0_74018330的博客 3659

Python 爬虫实战:爬取今日头条文章与阅读量数据

本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。

2503_91057718的博客 2519

JavaFX教程

Java FX教程Java FX使用教程1. 为什么选择JavaFX?2. JavaFX功能2.1 第三方JavaFX资源3. JavaFX应用4. 为什么要使用桌面应用程序?5. JavaFX用例6. 移动设备上的JavaFX7. Raspberry Pi上的JavaFX8. Java 11的JavaFX9. JavaFX游戏引擎10. JavaFX与Swing11. Github上的JavaFX示例12. JavaFX书籍13. JavaFX JavaDoc Java FX使用教程 1. 为什么选择Ja

tianjh1129的博客 6万+

【CASS精品教程】035:南方CASS7.1台阶画法案例大全

摘要:本文详细介绍了南方CASS7.1软件中5种台阶工具的使用方法,包括普通台阶、有边台阶、L型台阶、U型台阶和不规则台阶。重点说明各类台阶的绘制步骤和注意事项,如绘制方向(从右下角逆时针连接4个点)、台阶方向标识(白色边为下边)、台阶数自动生成不可更改等特性。同时指出高版本CASS可能存在操作差异,并配以多张示意图直观展示各类台阶的绘制过程和效果,为使用CASS7.1绘制建筑台阶提供了实用指导。(148字)

智慧空间实验室 2921

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

javafx应用_使用JavaFX构建和部署Android应用

javafx应用 Java平台的最初目标是为嵌入式设备提供软件环境。 但是,历史上一个奇怪的循环使Java成为企业软件的第一开发语言。 与利润丰厚的服务器市场相比,客户端上的Java受到的关注较少。 有了JavaFX,Java平台现在具有强大的客户端组件,可用于开发台式机,平板电脑,移动和嵌入式系统的应用程序。 在本文中,我们将展示如何在Android设备上部署JavaFX应用程序。 任何用...

cunfu6353的博客 3185

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

JavaFx应用打包

1. IDEA 开发HelloFX应用 1.1 创建项目 1.2 编辑界面 用SceneBuilder 创建一个基本页面 预览: 保存界面,覆盖 D:\HelloFx\src\sample\sample.fxml 文件 1.3 关联Controller 回到 IDE中,编辑sample.fxml文件 <VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="h

paopao_wu的专栏 4579

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaFX基础:2:使用javafx-maven-plugin管理JavaFX应用

javafx-maven-plugin是一个Maven的插件,用于提供在Maven中管理JavaFX应用的方式。只需要通过mvn jfx:run即可运行JavaFX应用。在这篇文章中,我们利用在IDEA的IDEA中生成的Sample代码,结合javafx-maven-plugin介绍如何在mvn中进行JavaFX应用的构建和运行。

知行合一 止于至善 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

javafx 创建项目_使用JavaFX快速创建应用程序

总览 JavaFX是基于Java的平台,用于构建可在台式机或移动设备上运行的富Internet应用程序(RIA)。 用JavaFX构建的应用程序是基于Java字节码的,因此它们可以在装有Java运行时环境的任何桌面上运行,也可以在装有Java2 ME的任何移动设备上运行。 JavaFX使GUI编程非常容易。 它使用声明性语法并提供动画支持。 在本文中,学习如何开始使用JavaFX来构建...

cusi77914的博客 1654

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaFX的:入门使用JavaFX

Hello World,JavaFX的风格教你是什么样创建和构建JavaFX应用程序的最佳方法是用一个“Hello World”应用程序。本教程的一个额外好处是,它使您可以测试您的JavaFX技术已正确安装。在本教程中使用的工具是NetBeans IDE的7.4。在开始之前,请确保您使用的是支持的JavaFX 8.请参见NetBeans IDE版本的认证系统配置中的Java SE 8的下载页面上的细

待到秋来九月八,我花开后百花杀。 1万+

使用Eclipse编写JavaFX应用

  JavaFX是由Oracle推出的用于创建Rich Internet application的技术。JavaFX可以制作桌面应用,配合Scene Builder可以很方面的制作界面。   jdk8是包含JavaFX的,但是在jdk11中成为独立的一个部分,因此需要在工程中引入相关的jar文件。   在Eclipse中编写JavaFX应用需要下载E(fx)clipse,以及用于可视化布局操作的S...

qq_36573282的博客 6785

java桌面应用开发利器JavaFx

本文简单介绍了javaFx的背景知识,介绍其使用场景,官网学习资料地址,以及使用javafx可以做的场景案例。希望对你有帮助。

夜郎King的博客 1万+

javafx 弹出html页面,将JavaFX应用程序嵌入HTML网页

创建JavaFX应用程序项目,即G。 “FxInHtml”。创建您的JavaFX应用程序,摹:package application;import javafx.application.Application;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.control.Label;import ja...

weixin_32795109的博客 2574

JavaFX Maven Plugin:简化JavaFX应用开发的终极指南

JavaFX Maven Plugin是专为JavaFX 11+应用设计的Maven插件,它能显著简化JavaFX与Maven的集成流程。作为OpenJFX社区维护的开源项目,这个插件让开发者能够轻松地在Maven生命周期中处理JavaFX相关的任务,包括运行、测试和打包应用程序。 ## 为什么选择JavaFX Maven Plugin?🚀 在传统的JavaFX开发中,配置构建流程往往需要大

gitblog_00740的博客 769
上一篇: struts2的常用UI标签传值
下一篇: 使用apache Lucene作MSWord全文检索
johnsearcher
博客等级 码龄17年 12粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值