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++; } }
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip