JavaFX 2.0 Hello World

在讨论示例本身之前,我想向您展示如何在NetBeans中创建JavaFX应用程序。 (如果尚未安装JavaFX和NetBeans,请参阅我以前的文章《 安装JavaFX 2.0和NetBeans 7.7.1》 )单击“文件”菜单中的“新建项目”以打开项目向导。 然后选择“ JavaFX-> JavaFX Application”,然后按“ Next”。

在下一个对话框中,您可以指定应用程序的名称和目标文件夹,该文件夹应存储在该文件夹中。 如果您已正确安装JavaFX,则应已指定“ JavaFX Platform”。 否则,您可以通过单击“管理平台->添加平台”并指定JavaFX安装的路径来自己添加平台。

注意:默认情况下,“创建应用程序类”复选框处于选中状态。 请取消选中它,因为我们将创建自己的应用程序类。
单击“完成”以创建您的第一个JavaFX应用程序。

JavaFX 2.0中的Hello World –示例1

大概每个软件开发人员都知道著名的“ HelloWorld”示例,因为该示例通常用于显示(未知)编程语言的语法并给出语言的初步线索。 我不想破坏这一传统,因此这里有JavaFX 2.0中HelloWorld程序的2个不同版本。 我将首先显示完整的代码,然后说明各个部分。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;/*** * Created on: 17.03.2012* @author Sebastian Damm*/
public class HelloJavaFX extends Application
{@Overridepublic void start(Stage stage) throws Exception{        Button bt = new Button('Print HelloWorld');bt.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0){System.out.println('HelloWorld! :)');}});StackPane root = new StackPane();Scene scene = new Scene(root, 300, 150);root.getChildren().add(bt);stage.setTitle('HelloWorld in JavaFX 2.0');stage.setScene(scene);stage.show();}public static void main(String[] args){Application.launch(args);}
}

值得一提的第一件事是,您必须从Application类进行扩展才能创建一个有效的JavaFX应用程序。 此类提供了几种实时循环方法,并且是您应用程序的起点。 它是一个抽象类(意味着您无法实例化它),它具有一个必须覆盖的抽象方法start 。 JavaFX运行时为您提供了一个stage对象,您可以使用该对象来显示您的UI。


要启动您的应用程序,您必须调用静态方法launch如本示例中的main方法所示。 启动应用程序后,它将调用start方法。 这是Application类的JavaDoc,它显示了启动JavaFX应用程序时的各个步骤。 JavaFX应用程序的入口点是Application类。 每当启动应用程序时,JavaFX运行时就会依次执行以下操作:构造指定的Application类的实例

  • 调用init()方法
  • 调用start(javafx.stage.Stage)方法
  • 等待应用程序完成,这可能在关闭最后一个窗口或应用程序调用Platform.exit()时发生
  • 调用stop()方法

让我们start方法中的真实源代码start
首先,我们创建一个简单的Button并指定一个通过setOnAction方法单击按钮时要触发的动作(比较JButton的addActionListener )。
接下来,我们创建一个StackPane对象,该对象是JavaFX中的布局窗格之一(下一篇博客文章将介绍JavaFX中的所有不同布局窗格)。 我在这里使用StackPane ,因为它会自动占用其周围父级提供的所有可用空间,并且会自动将其子级内部居中。

注意: JavaFX应用程序的基础是Scene graph 。 每个Node (包括简单的控件,组和布局窗格)都是节点的分层树的一部分,该树称为“ Scene graphScene graph以及整个JavaFX应用程序始终只有一个根节点!

如上所述, start方法具有一个Stage对象参数,该参数由JavaFX运行时提供。 此Stage对象是一种窗口。 您必须为其提供一个Scene对象作为其可见内容。 您可以通过传递应用程序的根节点来创建一个Scene对象。 可选参数包括场景的宽度和高度以及Paint对象,其中包括简单的颜色以及复杂的颜色渐变。
使用root.getChildren().add(bt); 您将按钮添加到您的根节点,这是一个堆栈窗格。 之后,我们为stage设置标题并应用创建的scene对象。 最后使用show方法,我们告诉stage进行展示。 (比较Swing的setVisible

现在,您的应用程序应如下所示:

如果您单击按钮,它将在命令行上打印“ HelloWorld”。 没什么特别的,但是这是您第一个可以使用的JavaFX应用程序,恭喜! :)

JavaFX 2.0中的Hello World –示例2

Additionally a slightly changed example, which will show the text in the GUI.
The code:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;/*** * Created on: 17.03.2012* @author Sebastian Damm*/
public class HelloJavaFX2 extends Application
{@Overridepublic void start(Stage stage) throws Exception{final Group root = new Group();Scene scene = new Scene(root, 500, 200, Color.DODGERBLUE);final Text text = new Text(140, 120, 'Hello JavaFX 2.0!');text.setFont(Font.font('Calibri', 35));text.setFill(Color.WHITE);text.setEffect(new DropShadow());        Button bt = new Button('Show HelloWorld');     bt.setLayoutX(180);bt.setLayoutY(50);bt.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0){root.getChildren().add(text);}});root.getChildren().add(bt);stage.setTitle('HelloWorld in JavaFX 2.0');stage.setScene(scene);stage.show();}public static void main(String[] args){Application.launch(args);}
}

我们在这里使用Group对象,而不是使用布局窗格。 GroupParent的子类(是Node的子类),并接收一个或多个子代。 Group直接调整大小,您可以向Group添加变换或效果,这将影响Group所有子级。 (请注意,我们现在还提供了“ Scene Paint Scene 。)
接下来,我们创建一个Text对象。 因为没有布局窗格,所以我们直接指定x和y坐标。 我们指定一种自定义字体,将颜色更改为白色,然后添加一个DropShadowButton还获得坐标,并且当我们单击按钮时,而不是在命令行上打印“ HelloWorld”,而是将创建的Text对象添加到我们的根元素(并因此添加到Scene Graph )。 单击按钮后,您的应用程序应如下所示。

摘要:

  • JavaFX Stage对象是一种窗口,其行为类似于Swing中的JFrameJDialog
  • JavaFX Scene对象是Stage的可见内容,并且具有单个Parent根节点。
  • Node是JavaFX中最重要的类之一。 每个控件或布局窗格都是一种节点。
  • Scene Graph是节点的分层树。 它只有一个根节点,是您应用程序的基础。 它必须传递给一个Scene对象
  • 为了创建和启动JavaFX应用程序,您必须完成以下步骤:
    • 扩展Application

参考: JavaFX 2.0中的Hello World,来自我们的JCG合作伙伴 Sebastian Damm,作者关于Java博客的Just my 2 cents 。


翻译自: https://www.javacodegeeks.com/2012/06/javafx-20-hello-world.html

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

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

相关文章

java 线程强制停止线程_java多线程之停止线程

在多线程开发中停止线程是非常重要的技术点。停止线程在Java语言中并不像break语句那样干脆。须要一些技巧性的处理。一、 异常法採用异常法来停止一个线程。首先我们须要了解一下两个方法的使用方法&#xff1a;1、interrupt()方法public class MyThread extends Thread{Over…

双系统Ubuntu分区扩容过程记录

本人电脑上安装了Win10 Ubuntu 12.04双系统。前段时间因为在Ubuntu上做项目要安装一个比较大的软件&#xff0c;导致Ubuntu根分区的空间不够了。于是&#xff0c;从硬盘又分出来一部分空间&#xff0c;分给Ubuntu。于是有了这篇Ubuntu扩容过程记录&#xff0c;也可以当作是一篇…

安装JAVA8要登录_JDK8的安装及环境配置

原文链接:https://www.cnblogs.com/chenxj/p/10137221.html1、下载JDK&#xff1b;b、或百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1S14y4_3eN9G6oOVfhmbe_w提取码&#xff1a;0cf62、双击安装程序&#xff0c;点击下一步安装目录若不修改&#xff0c;可直…

早期访问中带有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

App Engine中的Google Services身份验证,第2部分

在本教程的第一部分中&#xff0c; 我描述了如何使用OAuth进行Google API服务的访问/身份验证。 不幸的是&#xff0c;正如我稍后发现的那样&#xff0c;我使用的方法是OAuth 1.0&#xff0c;显然现在Google正式弃用了OAuth 1.0&#xff0c;改用OAuth 2.0版本。 显然&#xff0…

[51nod1297]管理二叉树

一个初始为空的二叉搜索树T&#xff0c;以及1到N的一个排列P: {a1, a2, ..., aN}。我们向这个二叉搜索树T添加这些数&#xff0c;从a1开始, 接下来是 a2, ...&#xff0c; 以aN结束。在每一个添加操作后&#xff0c;输出T上每对节点之间的距离之和。例如&#xff1a;4 7 3 1 8 …

Java Swing中的聊天气泡

本文将向您解释“如何在Java swing应用程序中绘制聊天气泡&#xff1f;” 聊天气泡与呼出气泡或思想气泡相同。 今天&#xff0c;大多数聊天应用程序都以这种格式显示转换&#xff0c;因此本文将帮助您在用Java swing创建的桌面应用程序中进行相同的操作。 以下课程用于绘制第一…

java内存模型按照线程隔离性_深入理解Java多线程与并发框(第③篇)——Java内存模型与原子性、可见性、有序性...

一、Java内存模型Java Memory Modle&#xff0c;简称 JMM&#xff0c;中文名称 Java内存模型&#xff0c;它是一个抽象的概念&#xff0c;用来描述或者规范访问内存变量的方式。因为各中计算机的操作系统和硬件不同&#xff0c;方式机制也可能不同&#xff0c;Java内存模型用于…

ZK实际应用:样式和布局

在之前的ZK in Action帖子中&#xff0c;我们使用ZK MVVM实现了CRUD功能 。 我们还快速浏览了一些样式代码&#xff0c;可能需要更多的解释。 在本文中&#xff0c;我们将讨论如何在ZK小部件上附加新CSS样式规则&#xff0c;以及如何覆盖现有样式。 我们还将介绍ZK中UI布局的一…

Tornado(一)

Tornado 特点 Tornado是一个用Python写的相对简单的、不设障碍的Web服务器架构&#xff0c;用以处理上万的同时的连接口&#xff0c;让实时的Web服务通畅起来。虽然跟现在的一些用Python写的Web架构相似&#xff0c;比如Django&#xff0c;但Tornado更注重速度&#xff0c;能够…

Android下Opengl ES实现单屏幕双眼显示

http://blog.csdn.net/u011371324/article/details/68946779 默认情况下&#xff0c;Opengl ES使用系统提供的帧缓冲区作为绘图表面&#xff0c;一般情况下&#xff0c;如果只在屏幕的表面绘图的话&#xff0c;系统提供的默认帧缓冲区很高效&#xff0c;但是很多应用程序需要渲…

Oracle Service Bus –线程阻塞案例研究

本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程。 本文也是您提高线程转储分析技能的绝佳机会&#xff0c;我强烈建议您学习并正确理解以下分析方法。 与过早的中间件&#xff08;Weblogic&#xff09;重…

java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

目录重载与重写的概念重载与重写的区别重载与重写的总结构造器是否能被重写override为什么函数不能根据返回类型来区分重载重载与重写的概念重载&#xff1a;同样一个方法可以根据输入参数列表的不同&#xff0c;做出不同的处理。普通方法和构造器方法都能够重载。方法重载&…

二维数组、多维数组

二维数组&#xff1a; 定义二维数组 int[,] myArray new int[几个一维数组,数组中的个数]; 数组可以具有多个维度。例如&#xff0c;下列声明创建一个四行两列的二维数组(可以理解为4个1维数组&#xff0c;数组中包含2个元素)&#xff1a; int[,] myArray new int[4,2]; int[…

一张大图片有多个小图片

这个页面也是我看到别人的写的&#xff0c;感觉不错&#xff0c;就自己留下了为了以后自己可以容易找到&#xff0c;也希望可以方便到别人。 写这个页面 需要注意的是&#xff1a; 1.写每一个小图片的位置时候&#xff0c;要用id,这样等级就高了&#xff0c;不然不起作用。 2.因…

Android Studio混淆

这一篇说一下Android Studio的代码混淆&#xff1a; 第一步&#xff1a;要想使混淆生效&#xff0c;要修改项目&#xff08;App&#xff09;下的build.gradle一处内容&#xff1a;minifyEnabled 的值 设置为true&#xff0c;当前项目就可以使用混淆了。 apply plugin: com.and…

Java 8:测试Lambda水

Java 8大约有一年的时间了&#xff0c;它具有我非常期待的语言功能&#xff1a; Lambda Expression 。 令人遗憾的是&#xff0c;另一个重要功能Java平台模块已延迟到Java9。但是&#xff0c;将lambda表达式&#xff08;或闭包&#xff09;添加到该语言中将使Java编程变得更好。…

基于阀值的工作流引擎设计

最近在做工作流处理流程部分的工作&#xff0c;顺便研究了一下工作流引擎的一些设计理念和原理。由于以前接触过人工智能神经网络的一些东西&#xff0c;发现工作流引擎和神经网络还是颇有一些相似之处&#xff0c;都是满足一定的条件下向下一个节点传递。在神经网络的神经元中…

Git之安装管理

1.Git安装部署 Git是分布式的版本控制系统&#xff0c;我们只要有了一个原始Git版本仓库&#xff0c;就可以让其他主机克隆走这个原始版本仓库&#xff0c;从而使得一个Git版本仓库可以被同时分布到不同的主机之上&#xff0c;并且每台主机的版本库都是一样的&#xff0c;没有主…

Java执行程序服务类型

ExecutorService功能是Java 5附带的。它扩展了Executor接口&#xff0c;并提供了线程池功能来执行异步简短任务。 使用Java 6提供的ExecutorService接口有五种异步执行任务的方法。 ExecutorService execService Executors.newCachedThreadPool&#xff08;&#xff09;; 这…