0
点赞
收藏
分享

微信扫一扫

javafx

javafx

application

JavaFX 应用程序从中扩展的应用程序类。
JavaFX 应用程序的入口点是 Application 类。每当启动应用程序时,JavaFX 运行时都会按顺序执行以下操作:
构造指定 Application 类的实例:
调用 {@link init} 方法
调用 {@link start} 方法
等待应用程序完成,当发生以下任一情况时会发生这种情况:
应用程序调用 {@link Platformexit}
最后一个窗口已关闭且 {@code Platform} 上的 {@code implicitExit} 属性为 true
所有 {@link stop} 方法
请注意,{@code start} 方法是抽象的,必须被覆盖。 {@code init} 和 {@code stop} 方法具有什么都不做的具体实现。
调用 {@link Platformexit} 是显式终止 JavaFX 应用程序的首选方法。直接调用 {@link Systemexit} 是一种可接受的替代方法,但不允许应用程序 {@link stop} 方法运行。
JavaFX 应用程序不应在 FX 工具包终止或从 ShutdownHook 终止后(即 {@link stop} 方法返回或 {@link Systemexit} 被调用后)尝试使用 JavaFX。

应用程序参数可通过从 {@link init} 方法调用 {@link getParameters} 方法或在调用 {@code init} 方法后的任何时间获得。

JavaFX 创建了一个应用程序线程,用于运行应用程序启动方法、处理输入事件和运行动画时间线。 JavaFX {@link Scene} 和 {@link Stage} 对象的创建以及将场景图操作修改为 <em>live<em> 对象(那些已附加到场景的对象)必须在 JavaFX 应用程序线程上完成。
Java 启动器在 JavaFX 应用程序线程上加载并初始化指定的应用程序类。如果 Application 类中没有 main 方法,或者如果 main 方法调用 Application.launch(),则在 JavaFX Application Thread 上构造 Application 的实例。

{@code init} 方法在启动器线程上调用,而不是在 JavaFX 应用程序线程上。这意味着应用程序不得在 {@code init} 方法中构造 {@link Scene} 或 {@link Stage}。应用程序可以在 {@code init} 方法中构造其他 JavaFX 对象。

在事件分派、运行动画时间线或任何其他代码期间发生的 JavaFX 应用程序线程上的所有未处理异常都将转发到线程的 {@link java.lang.Thread.UncaughtExceptionHandler 未捕获异常处理程序}。
application的生命周期:init() ➡️ start() ➡️ stop()

可以根据这个对象设置打开网页,程序运行到这里可以打开网页

HostServices getHostServices()

提供一个简单的程序(圆圈)

   @Override
public void start(Stage stage) {
Circle circ = new Circle(40, 40, 30);
Group root = new Group(circ);
Scene scene = new Scene(root, 400, 300);

stage.setTitle("My JavaFX Application");
stage.setScene(scene);
stage.show();
}

javafx的使用方式

第1种写法
`java
public static void main(String[] args) {
launch(args);
}



第2种写法
如果main方法和继承的类不是同一个类可以这样写

public class Main2 {
public static void main(String[] args) {
Application.launch(Main.class);
}
}

运行第一个窗口

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Main1 extends Application {
@Override
public void start(Stage stage) throws Exception {
Text text = new Text(10, 40, "Hello World!");
text.setFont(new Font(40));
Scene scene = new Scene(new Group(text));
stage.setTitle("Welcome to JavaFX!");
stage.setScene(scene);
stage.sizeToScene();
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}

Stage

​JavaFX {@code Stage} 类是顶级 JavaFX 容器。初级阶段由平台构建。应用程序可以构建其他舞台对象。 阶段对象必须在 JavaFX 应用程序线程上构建和修改。 一些 {@code Stage} 属性是只读的,即使它们具有相应的 set 方法,因为它们可以被底层平台从外部更改,因此不能绑定。此外,这些属性在某些平台上可能会被忽略,这取决于是否有窗口管理器以及它的配置方式。例如,没有窗口管理器的平台可能会忽略 {@code iconified} 属性。 舞台具有以下样式之一: <li>{@link StageStyleDECORATED} - 具有纯白色背景和 <li>{@link StageStyleUNDECORATED} - 纯白色背景的舞台 <li>{@link StageStyleTRANSPARENT} - 具有透明背景的舞台 <li>{@link StageStyleUTILITY} - 具有纯白色背景和 <p>必须在舞台可见之前初始化样式。<p> <p>在某些平台上,装饰可能不可用。例如,在某些移动或嵌入式设备上。在这些情况下,将接受对 DECORATED 或 UTILITY 窗口的请求,但不会显示任何装饰。 <p> 一个阶段可以选择拥有一个所有者窗口。当一个窗口是一个阶段的所有者时,它被称为该阶段的父级。 拥有的阶段与父窗口相关联。拥有的阶段将始终位于其父窗口的顶部。当父窗口关闭或图标化时,所有拥有的窗口也会受到影响。拥有的阶段不能独立图标化。 必须在舞台可见之前初始化所有者。 阶段具有以下模式之一: <li>{@link ModalityNONE} - 不阻塞任何其他窗口的阶段。<li> <li>{@link ModalityWINDOW_MODAL} - 阻止输入事件从其所有者(父)传递到所有窗口的阶段它的根。它的根是最近的没有所有者的祖先窗口。<li> <li>{@link ModalityAPPLICATION_MODAL} - 阻止输入事件从同一应用程序传递到所有窗口的阶段,但来自其子层次结构的窗口除外。<li > <p>当一个窗口被模态阶段阻塞时,它相对于其祖先的 Z 顺序被保留,它不接收任何输入事件和窗口激活事件,但继续正常动画和渲染。请注意,显示模态阶段并不一定会阻止调用者。无论舞台的形式如何,{@link show} 方法都会立即返回。如果您需要阻止调用者直到模态阶段被隐藏(关闭),请使用 {@link showAndWait} 方法。必须在舞台可见之前初始化模态。<p> Stage extends Window ​

顶置?

initSecurityDialog(boolean securityDialog)

设置阶段样式

initStyle(StageStyle style)

完成模式?

initModality(Modality modality) 

指定所有者

initOwner(Window owner) 

是否全屏

setFullScreen(boolean value)

设置title

setTitle(String value) 

是否图标化,也就是最小化(应该提前设置好图标)

setIconified(boolean value)

最大化

setMaximized(boolean value)

置顶

setAlwaysOnTop(boolean value)

定义用户是否可以调整 {@code Stage} 的大小

setResizable(boolean value) 

设置最小宽度

setMinWidth(double value) 

设置最小高度

setMinHeight(double value) 

设置最大宽度

setMaxWidth(double value) 

设置最大高度

 setMaxHeight(double value)

设置底部?

toBack()

全屏模式时显示的文本

setFullScreenExitHint(String value)

最小化的图标

getIcons();

固定大小,false不可变

setResizable(boolean value)

宽高的这些都可以设置监听

minHeightProperty() 

设置透明度

setOpacity(double value)

Scene

Scene必须包含一个node,Scene想运行要在Stage上

JavaFX {@code Scene} 类是场景图中所有内容的容器。场景的背景由 {@code fill} 属性指定填充。 <p> 应用程序必须通过设置 {@code root} 属性来指定场景图的根 {@code Node}。如果使用 {@code Group} 作为根,场景图的内容将被场景的宽度和高度裁剪,并且改变场景的大小(如果用户调整舞台大小)不会改变场景图的布局.如果一个可调整大小的节点(布局 {@code Region} 或 {@code Control} 被设置为根,那么根的大小将跟踪场景的大小,导致内容在必要时被中继。<p>场景的大小可能在构建过程中由应用程序初始化。如果未指定大小,场景将根据其内容的首选大小自动计算其初始大小。如果仅指定一个维度,则使用指定维度计算另一个维度,尊重内容根的偏差。


应用程序可能会在创建 {@code Scene} 时请求深度缓冲区支持或场景抗锯齿支持。只有 2D 形状且没有任何 3D 变换的场景不需要深度缓冲区,也不需要场景抗锯齿支持。包含 3D 形状或具有 3D 变换的 2D 形状的场景可以使用深度缓冲区支持进行正确的深度排序渲染;为避免深度战斗(也称为 Z 战斗),请禁用对没有 3D 变换的 2D 形状的深度测试。有关详细信息,请参阅 {@link NodedepthTestProperty depthTest}。具有 3D 形状的场景可以启用场景抗锯齿以提高其渲染质量。 <p> depthBuffer 和 antiAliasing 标志是条件特性。使用各自的默认值:false 和 {@code SceneAntialiasing.DISABLED}。有关详细信息,请参阅 {@link javafx.application

此 {@code Scene} 在 {@code Window} 上的水平位置

 void setX(double value)

此 {@code Scene} 在 {@code Window} 上的垂直位置。

void setY(double value) 

setHeight(double value)

 setWidth(double value) 

 setCamera(Camera value)

定义此 {@code Scene} 的背景填充。支持表示“无背景绘制”的 {@code null} 值和具有透明度的 {@link javafx.scene.paint.Paint}。 Scene 的默认填充是 {@link ColorWHITE},但更常见的情况是,向用户显示的初始颜色是 {@code Scene} 的 {@link rootProperty() root node} 的背景填充,因为它通常被拉伸以占用 {@code Scene} 中的所有可用空间。 {@code Scene} 的根节点被赋予 CSS 样式类“root”,并且 JavaFX(目前为 Caspian 和 Modena)附带的默认用户代理样式表将样式应用于此根样式类。在 Caspian 的情况下,这不会影响根节点的背景填充颜色,但在 Modena 的情况下,默认填充设置为浅灰色。


setFill(Paint value)

定义场景图的根 {@code Node}。如果使用 {@code Group} 作为根,场景图的内容将被场景的宽度和高度裁剪,并且改变场景的大小(如果用户调整舞台大小)不会改变场景图的布局.如果一个可调整大小的节点(布局 {@code Region} 或 {@code Control})被设置为根,那么根的大小将跟踪场景的大小,从而使内容在必要时被中继。场景不接受空根。
setRoot(Parent value)

设置鼠标光标

 setCursor(Cursor value) 

根据指定的 CSS 选择器在场景图中查找任何节点。如果多个节点与指定的选择器匹配,则此函数返回其中的第一个。如果没有找到具有此 ID 的节点,则返回 null。

Node lookup(String selector)

案例:设置一个绿颜色的方块

   public void start(Stage stage) {


Group root = new Group();
Scene s = new Scene(root, 300, 300, Color.BLACK);

Rectangle r = new Rectangle(25,25,250,250);
r.setFill(Color.BLUE);

root.getChildren().add(r);

stage.setScene(s);
stage.show();


}

Platform

尝试不是fx也运行了,不过是顺序执行

在未来某个未指定的时间在 JavaFX 应用程序线程上运行指定的 Runnable。此方法可以从任何线程调用,它将 Runnable 发布到事件队列,然后立即返回给调用者。 Runnables 按照它们发布的顺序执行。传递给 runLater 方法的 runnable 将在传递给后续调用 runLater 的任何 Runnable 之前执行。如果在 JavaFX 运行时关闭后调用此方法,则该调用将被忽略:不会执行 Runnable,也不会抛出异常。

注意:应用程序应避免使用太多待处理的 Runnable 来淹没 JavaFX。否则,应用程序可能会变得无响应。鼓励应用程序将多个操作批处理到更少的 runLater 调用中。此外,应尽可能在后台线程上完成长时间运行的操作,从而为 GUI 操作释放 JavaFX 应用程序线程。

在初始化 FX 运行时之前不得调用此方法。对于扩展 {@see Application} 并使用 Java 启动器或 Application 类中的一种启动方法来启动应用程序的标准 JavaFX 应用程序,FX 运行时由启动器在加载 Application 类之前初始化。对于使用 JFXPanel 显示 FX 内容的 Swing 应用程序,在构造第一个 JFXPanel 实例时初始化 FX 运行时。对于使用 FXCanvas 显示 FX 内容的 SWT 应用程序,FX 运行时在构造第一个 FXCanvas 实例时被初始化。

static void runLater(Runnable runnable)

如果调用线程是 JavaFX 应用程序线程,则返回 true。使用此调用确保给定任务正在 JavaFX 应用程序线程上执行(或未执行)。 @return 如果在 JavaFX 应用程序线程上运行,则返回 true

static boolean isFxApplicationThread()

导致 JavaFX 应用程序终止。如果在调用 Application start 方法之后调用此方法,则 JavaFX 启动器将调用 Application stop 方法并终止 JavaFX 应用程序线程。然后启动器线程将关闭。如果没有其他非守护线程正在运行,Java VM 将退出。如果从 Preloader 或 Application init 方法调用此方法,则可能不会调用 Application stop 方法。 <p>可以从任何线程调用此方法。<p> <p>注意:如果应用程序嵌入在浏览器中,则此方法可能无效。

static void exit()

将implicitExit 属性设置为指定值。如果此属性为真,JavaFX 运行时将在最后一个窗口关闭时隐式关闭; JavaFX 启动器将调用 {@link Applicationstop} 方法并终止 JavaFX 应用程序线程。如果此属性为 false,则应用程序将在最后一个窗口关闭后继续正常运行,直到应用程序调用 {@link exit}。默认值是true。 <p>可以从任何线程调用此方法。<p> @param implicitExit 一个标志,指示在最后一个窗口关闭时是否隐式退出。 @since JavaFX 2.2
static void setImplicitExit(boolean implicitExit)

Screen

描述图形目标(例如监视器)的特性。在桌面区域可以跨越多个物理屏幕设备的虚拟设备多屏幕环境中,{@code Screen} 对象的边界是相对于 {@code Screen.primary} 的。

Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();将舞台边界设置为主屏幕的可见边界 stage.setX(primaryScreenBounds.getMinX()); stage.setY(primaryScreenBounds.getMinY()); stage.setWidth(primaryScreenBounds.getWidth()); stage.setHeight(primaryScreenBounds.getHeight());

获取边界

Rectangle2D getBounds()

视觉边界

获取此 {@code Screen} 的视觉边界。这些边界考虑了本机窗口系统中的对象,例如任务栏和菜单栏。这些边界包含在 {@code Screen.bounds} 中。 @return 这个 {@code Screen} 的视觉范围

Rectangle2D getVisualBounds()

dpi分辨率

 final double getDpi()

Group

{@code Group} 节点包含一个 ObservableList 子节点,每当该节点呈现时,这些子节点就会按顺序呈现。 <p> {@code Group} 将采用其子级的集体边界,并且不能直接调整大小。 <p> 应用于 {@code Group} 的任何变换、效果或状态都将应用于该组的所有子级。此类变换和效果不会包含在此 Group 的布局边界中,但是如果直接在此 Group 的子级上设置变换和效果,则它们将包含在此 Group 的布局边界中。 <p> 默认情况下,{@code Group} 将在布局过程中将其托管的可调整大小的子项“自动调整大小”为其首选大小,以确保区域和控件在其状态更改时正确调整大小。如果应用程序需要禁用这种自动调整大小的行为,那么它应该将 {@link autoSizeChildren} 设置为 {@code false} 并理解如果孩子的首选大小发生变化,他们将不会自动调整大小(所以买家要小心!)

控制此 {@code Group} 是否会在布局过程中自动将任何可调整大小的托管子项调整为其首选大小。如果设置为 {@code false},则应用程序负责设置此 Group 的可调整大小的子节点的大小,否则这些节点可能会以零宽度高度结束并且不可见。此变量对不可调整大小的内容节点(形状、文本等)没有影响。

setAutoSizeChildren(boolean value)

获取此 {@code Group} 的子级列表。

ObservableList<Node> getChildren()

例子:两个颜色的

    @Override
public void start(Stage stage) {
Group g = new Group();
for (int i = 0; i < 5; i++) {
Rectangle r = new Rectangle();
r.setY(i * 20);
r.setWidth(100);
r.setHeight(10);
r.setFill(Color.RED);
g.getChildren().add(r);
}
Scene scene = new Scene(g);
stage.setScene(scene);
stage.show();


}

button

此类创建一个带标签的按钮。当按钮被按下时,应用程序可能会导致一些动作发生。此图像描绘了在 Solaris 操作系统下显示的“<code>Quit<code>”按钮的三个视图: <p> <img src="doc-filesButton-1.gif" alt="以下上下文描述了graphics" style="float:center; margin: 7px 10px;"> <p> 第一个视图显示正常显示的按钮。第二个视图在按钮具有输入焦点时显示该按钮。它的轮廓变暗,让用户知道它是一个活动对象。当用户在按钮上单击鼠标时,第三个视图显示按钮,因此请求执行操作。

用鼠标单击按钮的手势与 <code>ActionEvent<code> 的一个实例相关联,当鼠标在按钮上同时按下和释放时发出。如果应用程序想知道按钮何时被按下但未释放,作为一个单独的手势,它可以专门化 <code>processMouseEvent<code>,或者它可以通过调用 <code>addMouseListener 将自己注册为鼠标事件的侦听器<代码>。这两种方法都由所有组件的抽象超类 <code>Component<code> 定义。

当一个按钮被按下和释放时,AWT 通过在按钮上调用 <code>processEvent<code> 向按钮发送一个 <code>ActionEvent<code> 的实例。按钮的 <code>processEvent<code> 方法接收按钮的所有事件;它通过调用自己的 <code>processActionEvent<code> 方法传递一个动作事件。后一种方法将动作事件传递给任何已注册对此按钮生成的动作事件感兴趣的动作侦听器。

如果应用程序想要基于按钮被按下和释放来执行某些操作,它应该实现 <code>ActionListener<code> 并注册新的侦听器以接收来自该按钮的事件,方法是调用按钮的 <code>addActionListener<code>方法。应用程序可以使用按钮的动作命令作为消息传递协议。

设置按钮标签

setLabel(String label) 

设置按下按钮需要执行的操作

setActionCommand(String command)

添加指定的动作侦听器以接收来自该按钮的动作事件。当用户在此按钮上按下或释放鼠标时,会发生动作事件。如果 l 为 null,则不抛出异常并且不执行任何操作。 <p>有关 AWT 线程模型的详细信息,请参阅 <a href="doc-filesAWTThreadIssues.htmlListenersThreads" >AWT 线程问题<a>。
addActionListener(ActionListener l)

button1.setStyle(
"-fx-background-color: #1169EE20;"+ 背景颜色
"-fx-text-fill: #50ff23;"+ 文本颜色
"-fx-border-color: #EE1169;"+ 边框颜色
"-fx-border-radius: 5;"+ 边框圆角
"-fx-background-radius: 5;"+ 背景圆角
"-fx-background-insets: 0;"+ 边框到背景的距离
"-fx-font-size: 15;"+ 字体大小
"-fx-font-family: 'Segoe Print';"+ 字体
"-fx-border-style: dotted;"+ 边框样式
"-fx-border-width: 2;" 边框宽度
);

BackgroundFill

指示如何填充 {@link Region} 背景的填充和相关属性。因为BackgroundFill是一个不可变的对象,它可以安全地用在任何缓存中,并且可以安全地在多个Region之间或者在同一个Region中多次复用。 <p> 所有的背景填充都是按顺序绘制的。 <p> 当应用于具有定义形状的区域时,角半径将被忽略。

使用指定的填充、半径和插图创建一个新的 BackgroundFill。可以接受空值,但将使用默认值代替任何空值。
fill:任何油漆。如果为 null,则使用值 Color.TRANSPARENT。
radii: 角半径。如果为 null,则使用值 Radii.EMPTY。
insets: 插图。如果为 null,则使用值 Insets.EMPTY。
new BackgroundFill(null,null,null);

fill

渲染场景图时用于填充形状和背景的颜色或渐变的基类。
过度一下,Color extends Paint implements Interpolatable<Color>
所以经常使用就是color了。

color

  Color c = Color.BLUE;   //使用蓝色常数
Color c = new Color(0,0,1,1.0); // 标准构造函数,使用 0->1.0 值,显式 alpha 为 1.0

CornerRadii

定义 BorderStroke 的四个角中每个角的半径。 CornerRadii 类是不可变的,因此可以在多个 BorderStroke 上重用。该类定义了 8 个不同的值,对应于 4 个四分之一椭圆的水平和垂直分量,这些分量又定义了 BorderStroke 角的曲率。

Insets

一组矩形区域 4 边的内部偏移量

Border

{@link Region} 的边界。边框是一个不可变对象,它封装了渲染区域边框所需的整个数据集。因为这个类是不可变的,你可以在许多不同的 Region 上自由地重用相同的 Border。请参阅 {@link ..doc-filescssref.html JavaFX CSS 参考}以获取对区域边框样式的 CSS 规则的完整描述。

每个边框都由 {@link getStrokes() strokes} 和/或 {@link getImages() images} 组成。两个列表都不会为空,但其中一个或两个都可能为空。渲染时,如果没有指定图片或者没有图片加载成功,那么所有的笔画都会按顺序渲染。如果指定了任何图像并成功加载,则不会绘制任何笔划,尽管它们仍会影响边框的 {@link getInsets() insets} 和 {@link getOutsets() outsets}。 <p> 边框的 {@link getOutsets() outsets} 定义了 Region 的绘图区域的任何扩展,这是考虑所有边框绘制和定位所必需的。这些起始点由此边框上指定的 {@link BorderStroke} 和 {@link BorderImage} 定义。开端是严格非负的。

{@link getInsets()} 用于定义所有边框的最内边缘。它也总是严格非负的。 Region 使用 {@link Background} 和 Border 的 insets 和 {@link javafx.scene.layout.RegiongetPadding() Region 的 padding} 来确定 Region {@link javafx.scene.layout.RegiongetInsets() insets},它定义了 Region 的任何子项的内容区域。 Border 的开头与 Background 的开头以及 Region 的宽度和高度定义了 Region 的几何边界(这反过来又有助于 {@code layoutBounds}、{@code boundsInLocal} 和 {@code boundsInParent})。 <p> 边框最常用于您想用图像对区域进行蒙皮的情况,通常与 9-patch 缩放技术结合使用。在这种情况下,您还可以指定仅在图像由于某种原因无法加载时使用的描边边框。

BorderStroke

定义要在边框上用于设置区域样式的笔划。描边是基于矢量的渲染,勾勒出边界区域。它可以从区域的边缘插入(或开始),并且在计算区域的插入(用于定义内容区域)时会考虑笔划的值。使用任何 BorderImage 时不使用笔画视觉效果。 <p> 当应用于具有定义形状的区域时,使用 {@code top} 的边框宽度和描边信息,而忽略其他属性。

    * @param stroke  用于所有侧面的笔划。如果为 null,我们默认为 Color.BLACK。
* @param style 用于所有方面的样式。如果为空,我们默认为 BorderStrokeStyle.NONE
* @param radii 要使用的半径。如果为空,我们默认为 CornerRadii.EMPTY
* @param widths 要使用的宽度。如果为空,我们默认为 DEFAULT_WIDTHS

public BorderStroke(@NamedArg("stroke") Paint stroke, @NamedArg("style") BorderStrokeStyle style, @NamedArg("radii") CornerRadii radii, @NamedArg("widths") BorderWidths widths) {

点击事件

作者:三号小玩家


举报

相关推荐

0 条评论