标签: fxml

如何使用FXML在JavaFX 2.0中创建自定义组件?

我似乎无法找到关于这个主题的任何材料.为了给出一个更具体的例子,假设我想创建一个结合了复选框和标签的简单组件.然后,使用此自定义组件的实例填充ListView.

更新:请参阅我的答案以获取完整代码

更新2:有关最新教程,请参阅官方文档.在2.2中添加了许多新内容.最后,FXML简介涵盖了您需要了解的有关FXML的所有内容.

更新3:Hendrik Ebbers撰写了一篇关于自定义UI控件的非常有用的博文.

javafx-2 fxml

35
推荐指数
2
解决办法
4万
查看次数

使用FXML在JavaFX中自定义ListView

我想在javafx中创建自定义列表视图.在这里,我需要在列表单元格中绑定多个组件,如下所示,例如一个标签,一个文本字段,一个HBox下的一个按钮和两个按钮,一个超链接,另一个HBox中的一个标签,这些HBox属于一个VBox,这个VBox属于单个列表单元格,它将重复并生成一个列表视图.

代码是

<ListView fx:id="ListView" layoutX="0" layoutY="30" prefWidth="600" prefHeight="300">
    <HBox fx:id="listBox" alignment="CENTER_LEFT">
        <padding><Insets top="5" bottom="5" left="5"></Insets> </padding>
        <HBox alignment="CENTER_LEFT" prefWidth="170" minWidth="88">
            <Label fx:id="surveyName" text="Field A" styleClass="Name"></Label>
        </HBox>
        <VBox styleClass="Description" prefWidth="155" minWidth="86">

            <HBox>
                <HBox styleClass="surveyDesIcon" prefWidth="20" prefHeight="16"></HBox>
                <Label fx:id="surveyCode" text="PRW3456HJ"></Label>
            </HBox>
            <HBox>
                <HBox styleClass="DateIcon" prefWidth="20" prefHeight="16"></HBox>
                <Label fx:id="Date" text="PRW3456HJ"></Label>
            </HBox>
        </VBox>
        <HBox fx:id="Status" prefWidth="160" minWidth="80">
            <Label fx:id="StatusLabel" text="Checking Files.."/>
        </HBox>
        <HBox fx:id="StatusIcon1" prefWidth="50" prefHeight="50" alignment="CENTER">
            <Label styleClass="StatusIcon1" prefWidth="24" prefHeight="24" alignment="CENTER"/>
        </HBox>
        <HBox fx:id="StatusIcon2" prefWidth="50" prefHeight="50" styleClass="StatusIconBox" alignment="CENTER">
            <Hyperlink styleClass="StatusIcon2" prefWidth="24" maxHeight="24" alignment="CENTER"/> …
Run Code Online (Sandbox Code Playgroud)

javafx fxml

35
推荐指数
2
解决办法
5万
查看次数

为什么scenebuilder 2.0无法打开我的fxml文件?

我有一个使用SceneBuilder 2.0创建的fxml文件.这个文件在我使用Netbeans 8开发的JavaFx项目中使用.今天,SceneBuilder停止使用我的文件.当我尝试打开它时,SceneBuilder会最小化并且不会打开文件.我的场景图中没有任何自定义组件.

我将文件的内容复制到一个新的fxml文件中并给它一个新名称.然后,SceneBuilder能够打开此文件,即使内容与无法打开的文件相同.

这里发生了什么?

我道歉,但我无法发布fxml文件的内容.

javafx fxml scenebuilder

32
推荐指数
2
解决办法
3万
查看次数

FXML完全参考?

我正在尝试学习JavaFX 2.0 + FXML,我发现制作fxml文件有点不舒服,不知道我可以放入什么,我不能.我的意思是FXML中哪些标签是可能的,哪些属性是evety标签?值evety属性可以具有哪些值,等等.Web中有一些示例,但它们没有显示FXML的漏洞功能.我曾尝试将NetBeans和Eclipse插件用于JavaFX 2.0,但是,它们都没有FXML的任何内容,它们只是验证开放式标签和其他简单的东西,这是evety XML编辑器可以做到的.也许我错误地配置了这些插件.那么,是否有任何文献显示FXML的完整参考(所有标签,属性及其可能值)?

javafx javafx-2 fxml

31
推荐指数
1
解决办法
1万
查看次数

JavaFX FXML API版本警告

我最近在启动JavaFX应用程序时注意到以下警告:

警告:JavaFX运行时版本8.0.60使用版本8.0.65的JavaFX API加载FXML文档

有问题的FXML是由Gluon Scene Builder 8.1.0创建的,运行它的捆绑Java,版本1.8.0_65.该应用程序是使用我的OS Java 1.8.0_72版启动的.

FXML的根节点确实具有该属性

xmlns="http://javafx.com/javafx/8.0.65"
Run Code Online (Sandbox Code Playgroud)

但我认为1.8.0_72> 1.8.0_65,为什么我收到这条消息呢?这是我应该担心的事情吗?有没有办法问jre什么是JavaFX API版本(显然,它与Java版本不同)?

编辑:
运行James_D建议的代码给出以下结果:

java版本:1.8.0_72-internal
javafx.version:8.0.60

那么,看起来像JDK中的JavaFX版本是错的?或者我可能有一个旧的jfxrt.jar?我会调查一下.

java javafx fxml

29
推荐指数
3
解决办法
4万
查看次数

如何在资源文件夹中引用javafx fxml文件?

我正在创建一个javafx GUI应用程序,我的项目是一个maven配置的项目.我希望能够在我的控制器中引用我的fxml文件:

FXMLLoader.load(getClass().getResource("main.fxml"); 
Run Code Online (Sandbox Code Playgroud)

我的main.fxml文件位于src/main/resources文件夹中,而我的控制器位于src/main/java文件夹中.我该怎么做呢?我的src/main/resources文件夹位于构建路径中,我可以从src/main/java文件夹中的类调用src/main/resources文件夹中的.properties文件.

编辑

我试图将fxml文件放在主资源文件夹的相应目录中:

在此输入图像描述

但我仍然有一个错误.

java resources javafx buildpath fxml

28
推荐指数
2
解决办法
6万
查看次数

如何控制JavaFX Tooltip的延迟?

我正在玩JavaFX Tooltip.我意识到,就个人而言,徘徊在某些东西和实际出现的工具提示之间的延迟太长了.API中的内容显示:

通常,当鼠标在控件上移动时,工具提示会"激活".工具提示变为"激活"和实际显示之间通常存在一些延迟.详细信息(例如延迟量等)留给Skin实现.

经过一些进一步的调查,我无法找到控制此行为的任何可能性.在JavaFX的CSS参考没有关于延迟时间和运行时间,评价信息getCssMetaData()没有帮助.

我知道,有一种方法可以通过onMouseEntered和手动控制工具提示onMouseExited,但是真的没有别的方法吗?或者我错过了一个明显的选择?

css java fxml javafx-8

28
推荐指数
6
解决办法
2万
查看次数

带控制器的多个FXML,共享对象

各位晚上好,

我已经在这个主题上发现了很多帖子,但我仍然无法将一个对象从Controller1传递给Controller2.有没有一个完整的教程或一些示例项目,这样做?

在我遇到困难之前,我已经走到了这一步:

国家级

public class Country {
private SimpleStringProperty country = new SimpleStringProperty("");

//Constructor
public Country() {
}

//GETTERS
public String getCountry() {
    return country.get();
}

//SETTERS
public void setCountry(String value) {
    country.set(value);
}

@Override
public String toString() {
    return getCountry();
}
}
Run Code Online (Sandbox Code Playgroud)

程序启动时,主要的FXML被加载(Sample.fxml).其中包含一个边框窗格,顶部面板中有一个菜单栏,中间有一个内容窗格.在初始化时,我创建一个新的Country对象并将其存储在全局变量中.我有一个方法,当单击一个菜单项时,将另一个FXML加载到内容窗格中:

SampleController.java

public class SampleController implements Initializable {

@FXML
private Pane pContent;

private Country c;

@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
    System.out.println(c); //this prints Belgium, which is correct

    URL url = getClass().getResource("Sub1.fxml");

    FXMLLoader fxmlloader …
Run Code Online (Sandbox Code Playgroud)

controller javafx-2 fxml javafx-8

27
推荐指数
1
解决办法
4万
查看次数

JavaFx嵌套控制器(FXML <include>)

这个 tutotial中,是一个如何包含自定义组件并使用来自容器控制器的控制器的示例.

main_window_content.fxml

<VBox fx:controller="com.foo.MainController">
   <fx:include fx:id="dialog" source="dialog.fxml"/>
   ...
</VBox>
Run Code Online (Sandbox Code Playgroud)

MainController.java

public class MainController extends Controller {
    @FXML private Window dialog;
    @FXML private DialogController dialogController;

    ..
Run Code Online (Sandbox Code Playgroud)

如果组件只包含一次,它可以正常工作.如果包含两次相同的组件,则不会初始化控制器.两个控制器都为空.

main_window_content.fxml

    <VBox fx:controller="com.foo.MainController">
       <fx:include fx:id="dialog1" source="dialog.fxml"/>
       <fx:include fx:id="dialog2" source="dialog.fxml"/>
       ...
    </VBox>
Run Code Online (Sandbox Code Playgroud)

MainController.java

    public class MainController extends Controller {
        @FXML private Window dialog1;
        @FXML private DialogController dialogController1;
        @FXML private Window dialog2;
        @FXML private DialogController dialogController2;
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决问题吗?谢谢

这是我的FXML加载代码.它在主应用程序中执行:

public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml"));
    stage.setTitle("FXML Welcome"); 
    stage.setScene(new Scene(root, 300, …
Run Code Online (Sandbox Code Playgroud)

controller nested javafx include fxml

27
推荐指数
1
解决办法
3万
查看次数

如何在Scene Builder中使窗口全屏/最大化?

我在SceneBuilder中为我的JavaFX应用程序创建了一个视图.我希望我的观点最大化.如何在SceneBuilder或.fxml文件中实现此目的?

javafx fxml scenebuilder

27
推荐指数
2
解决办法
6万
查看次数