标签: fxml

仅使用FXML设置JavaFX 2按钮的样式 - 如何将图像添加到按钮?

我想改变一个按钮的样式,这里的大多数线程和互联网上的文章都展示了如何使用Java代码来实现它,我认为这不是一个真正好的解决方案,有没有办法比如说通过仅使用FXML(无Css)设置一个带有一些文本和图像的按钮?

java netbeans javafx-2 fxml scenebuilder

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

如何使用相同的模型对象初始化JavaFX控制器?

脚本

我正在创建一个GUI,其中多个视图引用相同的模型对象.

我习惯了什么

在Swing中,如果我希望所有视图都引用相同的模型,我会将模型传递给构造函数.

我目前正在做什么

在JavaFX中,我通过在每个视图/控制器加载后在视图/控制器(菜单栏,拆分窗格,制表符......)中设置setter方法来传递模型.我发现这非常俗气和笨重.另外,我发现它不起作用,因为在某些情况下我需要在初始化某些控制器小部件之前模型已经存在于控制器中.

Lackluster Alternatives

(注意:我正在引用这些stackoverflow问题:

  • Controller.java文件中的Javafx 2.0操作方法Application.getParameters()
  • 传递参数JavaFX FXML
  • 带控制器的多个FXML,共享对象
  • 加载FXML时将参数传递给控制器)

  • 依赖注入

    • 我看过这个网站,http: //www.zenjava.com/2011/10/23/javafx-2-0-fxml-and-spring/,我看了一下google Guice,但我不知道看不到简单地给每个JavaFX视图/控制器提供相同模型对象的方法.看起来注入会为每个视图/控制器注入不同的模型.
  • 将模型对象保存为公共静态变量

    • 这是一个选项,但目前我不喜欢让公共静态模型如此开放和可用的想法.显然,我可以使它成为一个私有静态变量,并有getter和setter,但我也不喜欢这个想法.
  • 将参数从调用者传递到控制器

    • 我希望每个控制器在其构造函数中加载自身,并且我希望每个自定义控制器自动注入其父控制器.例如,卡片概述选项卡会像这样加载自身:

      public CardOverviewTab() {
          FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("card_overview_tab.fxml"));
          fxmlLoader.setRoot(content);
          fxmlLoader.setController(this);
      
          try {
              fxmlLoader.load();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 并且SingleGameSetup控制器将卡概述选项卡自动注入变量:

      public class SingleGameSetupController extends AnchorPane {
      
          @FXML private CardOverviewTab cardOverviewTab;
      
          // Rest of the class
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 包含卡片概述选项卡的fxml部分如下所示:

      <CardOverviewTab fx:id="cardOverviewTab" />
      
      Run Code Online (Sandbox Code Playgroud)
    • 这样我不需要担心手动加载控制器,但我仍然有设置模型的问题.

  • 在FXMLLoader上设置控制器

    • 此选项与我习惯的类似,将模型作为参数传递给构造函数,但它仍然存在使用FXMLLoader手动加载控制器的问题.
  • 活动巴士

    • 我没有读太多内容,但从我所看到的事件总线似乎是不活跃和过时的.
  • 独生子

    • 这类似于对控制器可以检索的模型对象的公共静态引用,但我再次寻找更好的解决方案.另外,我不想要单身模型.

我在寻找什么

有没有办法以不那么繁琐的方式传递模型对象?我正在寻找一种简单的方法,如将模型传递给构造函数,但我不想处理通过FXMLLoader手动加载控制器,或者在加载控制器后设置模型.也许有一个类来检索模型是最好的选择,但我要求以防万一有更好的方法.

java dependency-injection controller javafx fxml

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

如何处理ListView项目单击操作?

我有我的JavaFX 2.0应用程序,在用户单击ListView元素中的项目后,我需要做一些操作.要构建用户GUI我正在使用FXML,其中我有这样的东西:

        <children>
            <ListView fx:id="listView" GridPane.columnIndex="0" 
            GridPane.rowIndex="1" labelFor="$pane" 
            onPropertyChange="#handleListViewAction"/>
        </children>
Run Code Online (Sandbox Code Playgroud)

这是我在控制器中为此事件所拥有的:

        @FXML protected void handleListViewAction(ActionEvent event) {
           System.out.println("OK");
        }
Run Code Online (Sandbox Code Playgroud)

这是一个错误,我接受,当这个gui构建的场景:

javafx.fxml.LoadException: java.lang.String does not define a property model for "property".
at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(Unknown Source)
at javafx.fxml.FXMLLoader.processEndElement(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at fxmlexample.FXMLExampleController.handleSubmitButtonAction(FXMLExampleController.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

listview javafx javafx-2 fxml

22
推荐指数
3
解决办法
7万
查看次数

如何嵌入.ttf字体是JavaFx 2.2?

首先,我是编码领域的新人.我需要在我的基于javaFXML的应用程序中嵌入一个字体,不知道该怎么做.我已经将字体粘贴在fontName.ttf项目源根目录中的"resources"文件夹中,即App/src/app/resources.我已将组件(文本)的CSS设置为

#text {
    -fx-font-family: url(resources/fontName.ttf);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在url中添加引号,即url("resources/fontName.ttf");,但它不起作用.我还为组件设置了css id,这样就不会出现问题了.还有其他工作方式吗?我见过http://fxexperience.com/2010/05/how-to-embed-fonts/,但由于我有jdk 1.7 u21,它不起作用.有关正确嵌入字体的方法的想法吗?

embed fonts javafx fxml

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

如何使用不同的fxml文件创建多个javafx控制器?

我一直在看一些博客和其他stackoverflow问题,我没有看到我的问题的直接答案.我正在创建一个javafx gui客户端,我希望我的菜单栏在一个fxml中是一个控制器,然后我希望内容区域是额外的fxml文件.登录屏幕将是一个fxml,登录屏幕将是应用程序的主要内容,并将在一个fxml中.我该怎么做呢?

我只是不想在同一个文件中拥有我的登录,菜单栏和主要内容的所有代码.这是我正在做的工作的图像:

在此输入图像描述

java controller javafx javafx-2 fxml

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

IntelliJ IDEA - getClass().getResource("...")返回null

我正在使用IntelliJ IDEA 13.1.5,我曾经使用Eclipse.我正在研究JavaFX应用程序,我尝试使用getClass().getResource()在我的MainApp类中加载FXML文件.我阅读了文档并尝试了几个想法,最后我得到了null.

这是层次结构:

dz.bilaldjago.homekode.MainApp.java

dz.bilaldjago.homekode.view.RootLayout.FXML

这是我使用的代码片段:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("view/RootLayout.fxml"));
Run Code Online (Sandbox Code Playgroud)

我尝试了其他解决方案,例如从root用户提供url并使用classLoader

结果是一样的.请问任何想法

java javafx intellij-idea fxml

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

如何在FXML控制器中获取父窗口?

例如,我想在单击按钮时打开DirectoryChooser:

<VBox fx:controller="com.foo.MyController"
    xmlns:fx="http://javafx.com/fxml">
    <children>
        <Button text="Click Me!" onAction="#handleButtonAction"/>
    </children>
</VBox>
Run Code Online (Sandbox Code Playgroud)

而Controller类:

package com.foo;

public class MyController {
    public void handleButtonAction(ActionEvent event) {
        DirectoryChooser dc = new DirectoryChooser();
        File folder = dc.showDialog(null);//I want to put the WIndows here.
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将主窗口放到ShowDialog中,以便它被阻止但我该如何访问它?

javafx-2 fxml

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

JavaFX:FXML:如何让孩子扩展其大小以适应父窗格?

我已设法在父fxml(mainMenu UI)下加载子fxml(子UI).我创建了一个id为"mainContent"的AnchorPane.此窗格绑定到4个方面,并且更改符合舞台.

子窗口将加载到"mainContent"锚定窗格中.但是,我无法弄清楚如何让孩子与其父"mainContent"一起改变.

我的孩子UI就是这样调用的.

@FXML
private void mnuUserLevel_onClick(ActionEvent event) {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("DBedit.fxml"));
    loader.setController(new DBeditEntityUserlevel());

    try {
           Node n = (Node)loader.load();
           mainContent.getChildren().add(n);
    } catch (IOException e){
           System.out.println(e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

为了进一步说明我的问题,请看我的快照.红场就是孩子.黄色方块是MainMenu父级的"mainContent"AnchorPane.

在此输入图像描述

java javafx-2 fxml

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

如何使用Button Click在运行时更改子fxml gui部件

我正在尝试为一个复杂的gui构建一个骨架,因此我的想法是在javafx 2.1中使用mvc样式创建所有内容,因此每个组件都有一个fxml文件,如果需要css,controller和model.我试着弄清楚如何改变子场景(运行时的子fxml).有谁知道怎么做?我有点坚持这个.可以添加MainViewController吗?场景:用户点击任务栏中的按钮,包含的content1.fxml将替换为content2.fxml

这里是基本代码

MainApp.java

Loads the MainView.fxml
Run Code Online (Sandbox Code Playgroud)

MainView.fxml

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


 <BorderPane xmlns:fx="http://javafx.com/fxml">
<center>
    <fx:include source="Content1.fxml"/>
</center>

<bottom>
    <fx:include source="TaskBar.fxml"/>
</bottom>

</BorderPane>
Run Code Online (Sandbox Code Playgroud)

Content1.fxml

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content1">
    <Label text="Hallo Java FX 2.1.1 Content1.fxml"/>
</StackPane>
Run Code Online (Sandbox Code Playgroud)

Content2.fxml

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content2">
    <Label text="Hallo Java FX 2.1.1 Content2.fxml"/>
</StackPane>
Run Code Online (Sandbox Code Playgroud)

TaskBar.fxml

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<HBox xmlns:fx="http://javafx.com/fxml" spacing="10" alignment="center" 
     fx:id="taskBar" fx:controller="TaskBarController">
    <children>
        <Button fx:id="taskBarButton1" onAction="#handleTaskBarButton1Action"/>     
        <Button fx:id="taskBarButton2" onAction="#handleTaskBarButton2Action"/> 
    </children>
</HBox>
Run Code Online (Sandbox Code Playgroud)

TaskBarController.java

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent; …
Run Code Online (Sandbox Code Playgroud)

javafx-2 fxml

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

Javafx使用按钮在另一个窗口中打开另一个fxml

是否可以在javafx中使用按钮从另一个fxml打开新的阶段(窗口)?谢谢你的回答.

javafx window stage fxml

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