javaFX 利用FXML来构建表格出现语法编程中格式错误一般是什么情况,但是项目正常运行为什么?

最近我开始学习JavaFX,现在有些事情困扰着我,我无法找到解决我的"问题"的方法.我已经找到类似的问题和几个解决我的问题的解决方案,但我找不到一个对我有用或只是我做错了什么.我想要做的是有一个主要的FXML文件与自己的FXML控制器类.然后我想在主FXML中添加(导入)其他FXML文件,这些文件也有控制器.我尝试了几件事,但没有任何效果,所以我决定描述我在做什么.首先,我使用Scene Builder创建主FXML文件,然后我为主FXML创建Controller.然后我在Scene Builder中设置主FXML的控制器类作为主控制器(当然......).在那之后,我对第二个FXML做了同样的事情.然后我试图将第二个FXML导入主FXML并且它工作正常,如果我没有为第二个FXML设置控制器.如果我在将第二个FXML导入到主FXML之前选择了第二个FXML的控制器,我仍然可以导入FXML文件并保存它,但在我尝试运行程序后,我收到错误.所以基本上我要做的是在一个Main FXML文件中有多个带有自己的控制器的FXML文件,这个文件也有一个Controller类.我不完全确定这是可能的,所以请告诉我这是可能的,如果可能的话,我做错了什么.这是我的代码:public class MainSceneController implements Initializable {
@FXML
private TextField mainTxtField;
public MainSceneController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainScene.fxml"));
fxmlLoader.setController(this);
fxmlLoader.setRoot(this);
try {
fxmlLoader.load();
} catch (IOException exc) {
} }
@FXML
public void buttonActionMethod(ActionEvent event) {
mainTxtField.setText("Button1 is clicked");
}
@Override
public void initialize(URL location, ResourceBundle resources) {
} }
我调用了第二个FXML和第二个控制器LeftScene和LeftSceneController,所以这里是第二个控制器的代码: public class LeftSceneController implements Initializable {
@FXML
private TextField leftTxtField;
public LeftSceneController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainScene.fxml"));
fxmlLoader.setController(this);
fxmlLoader.setRoot(this);
try {
fxmlLoader.load();
} catch …}
关于fxml的认知,我们先从官方介绍看一下
OverviewFXML is a scriptable, XML-based markup language for constructing Java object graphs. It provides a convenient alternative to constructing such graphs in procedural code, and is ideally suited to defining the user interface of a JavaFX application, since the hierarchical structure of an XML document closely parallels the structure of the JavaFX scene graph.This document introduces the FXML markup language and explains how it can be used to simplify development of JavaFX applications.
机器翻译:FXML 是一种可编写脚本的、基于 XML 的标记语言,用于构建 Java 对象图。它为在过程代码中构建此类图提供了一种方便的替代方法,并且非常适合定义 JavaFX 应用程序的用户界面,因为 XML 文档的层次结构与 JavaFX 场景图的结构非常相似。以下是一个简单的fxml文件设计以及效果图。部分fxml源码:用户名、密码控件实现:<!--容器HBox-->
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="200.0">
<!--children表明父子关系-->
<children>
<!--用户名标签-->
<Label fx:id="pin" prefHeight="27" prefWidth="50" text="PIN:" textAlignment="JUSTIFY" />
<!--用户名输入文本框-->
<TextField fx:id="name" focusTraversable="false" prefWidth="170.0" promptText="Please enter your name">
<padding>
<!--输入框图标左间距设置,可以实现输入文本与窗内图标不重叠-->
<Insets left="20.0" />
</padding>
</TextField>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="50.0" prefWidth="200.0">
<children>
<!--密码标签-->
<Label fx:id="pwd" prefHeight="27" prefWidth="50" text="PWD:" textAlignment="JUSTIFY" />
<!--密码非明文显示输入控件-->
<PasswordField fx:id="word" focusTraversable="false" prefWidth="170.0" promptText="Please enter password">
<padding>
<!--输入框图标左间距设置,可以实现输入文本与窗内图标不重叠-->
<Insets left="20.0" />
</padding>
</PasswordField>
</children>
</HBox>
通过css对fxml元素属性修饰:学习链接:https://openjfx.io/javadoc/16/javafx.graphics/javafx/scene/doc-files/cssref.html/* 全局文本框设置*/
.text-field{
-fx-min-width: 170px;
-fx-min-height: 27px;
-fx-background-color:white;
-fx-background-image: url(/image/user.png);
-fx-background-repeat: no-repeat;
-fx-background-position: left;
}
/* 全局密码框设置*/
.password-field{
-fx-background-color:white;
-fx-background-image: url(/image/pwd.png);
-fx-background-repeat: no-repeat;
-fx-background-position: left;
}
从上可以看出,fxml标签语言与html很是类似。很多人认为在html的元素前面加上“fx:元素”就能互通。这句话虽然不准确,但是恰恰说明,两者的共通性有多强。同时,CSS布局以及修饰能力几乎一致,只需要属性格式有所变化(增加-fx-)。较为了解一些web页面的内容知识,几乎就能看懂fxml文件内容。效果图如下:以下为fxml文件整体结构:ElementsIn FXML, an XML element represents one of the following:A class instanceA property of a class instanceA “static” propertyA “define” block A block of script code以上是官方文档对fxml元素组成分类介绍,也就是说,fxml元素总共划分为四类:某个类的实例、某个类实例的属性、静态属性、“定义”块 脚本代码块。也就是说,我们在fxml中的标签还可以代表着我们的实例对象,例如:<AnchorPane></AnchorPane>
AnchorPane属于包package javafx.scene.layout下的对象,很自然其他基本都是对象的属性。因此使用fxml的方式与直接使用Java对象编码的方式最终是一致的,只是效果不同。先关原理我们下看下文件基本结构,后续再进行详细分析。<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" styleClass="all" stylesheets="@/css/cookies.css"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sample.controller.FrameController">
<children>
<!--
页面设计详细内容-->
</children>
</AnchorPane>
1.与xml文件基本一致,首先声明版本号以及编码格式
<?xml version="1.0" encoding="UTF-8"?>
2.包中的所有类导入到当前命名空间中
<?import javafx.scene.text.*?>
任何遵循 JavaBean 构造函数和属性命名约定的类都可以使用 FXML 轻松实例化和配置。它创建了javafx.scene.control.Label 的一个实例并将其“text”属性设置为“Hello, World!”<?import javafx.scene.control.Label?>
<Label text="你好,世界!"/>
3.fxml文件与控制器Controller.java关联方式
fx:controller=“com.sample.controller.FrameController”
4.fxml文件与属性布局文件css关联方式
stylesheets="@/css/cookies.css
标签对象与web拖拽式基本一致,向更加全面了解页面控件建议大家打开Javafx Scene Builder查看种类。这款视图拖拽工具基本包含了Javafx页面所需的页面所有控件。关于工具的使用大家可以直接百度,后续会有简单介绍。页面布局渲染我们采用css文件,编写模式无差异。官网文档:https://openjfx.io/javadoc/16/javafx.graphics/javafx/scene/doc-files/cssref.htmlFXMLLoader 类负责实际加载 FXML 源文件并返回结果对象图此处内容官方文档描述比较清晰,我就不再描述。。以上内容主要是简单了解一下fxml的使用,不深入分析原理,想了解更多信息,还是观看官方文档。官方地址:https://openjfx.io/javadoc/16/javafx.fxml/javafx/fxml/doc-files/introduction_to_fxml.html#fxmlloader}

我要回帖

更多关于 jquery导入无法使用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信