Tag: fxml

JavaFX 2.0 + FXML – 奇怪的查找行为

感谢Node#lookup()我希望在装有FXMLoader的场景中找到一个VBox节点,但是我得到以下exception: java.lang.ClassCastException: com.sun.javafx.scene.control.skin.SplitPaneSkin$Content cannot be cast to javafx.scene.layout.VBox 代码 : public class Main extends Application { public static void main(String[] args) { Application.launch(Main.class, (java.lang.String[]) null); } @Override public void start(Stage stage) throws Exception { AnchorPane page = (AnchorPane) FXMLLoader.load(Main.class.getResource(“test.fxml”)); Scene scene = new Scene(page); stage.setScene(scene); stage.show(); VBox myvbox = (VBox) page.lookup(“#myvbox”); myvbox.getChildren().add(new Button(“Hello world !!!”)); […]

是否可以将包含自定义JavaFX控件的JAR导入Scene Builder?

当我注意到我几乎完全有同样的事情三次时,我正在一个舞台上工作。 而不是那个(因为我讨厌那个),我决定把我拥有的那些3次并把它变成一个自定义组件。 现在我知道我可以在代码中添加它但我无法预测布局行为(其中两个将直接进入选项卡,第三个将进入网格窗格)。 我尝试将包含控件的.jar导入Scene Builder。 弹出一个对话框,询问我想要导入的JAR中的内容,但它完全是空的。 我之前看到有些人添加了“自定义控件”(我松散使用的术语),但发现基本上它只是将一堆组件转储到一起形成控件。 这可能适用于某些人,但我不是在寻找。 澄清 我想要的是什么(我是否要查看FXML代码): 我不想要的: //bla bla column constraint stuff //etc, etc 这可能吗? 我再次离开C#和VS2010而且在自定义控件方面我有点被宠坏了所以如果有可能做出类似的事情,有人可以告诉我怎么样? 是否可以将包含自定义JavaFX控件的已编译JAR文件导入到Scene Builder中,以便将其从库中删除将导致我在那里描述的内容? 编辑1好的,这就是我在FXML文件中的内容。 根据mlody991,我需要3个文件来完成这项工作:FXML文件(使用SceneBuilder构建): Java类文件(代表代码中的实际对象): package DGCSDefiner; import java.io.IOException; import static java.util.Arrays.asList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.ColorPicker; import javafx.scene.control.ComboBox; import javafx.scene.control.Slider; import javafx.scene.control.TabPane; import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; public class DGCSDefiner extends Pane […]

如何使用javafx和fxml中的ImageView组件显示图像?

我想这是一件非常简单的事情,但我无法支持它。 我想要的只是在链接到fxml的ImageView上显示图像。 这是我的代码: package application; import java.io.File; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; public class Main extends Application { @FXML private ImageView imageView; @Override public void start(Stage primaryStage) { try { AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource(“Sample.fxml”)); Scene scene = new Scene(root,400,400); scene.getStylesheets().add(getClass().getResource(“application.css”).toExternalForm()); primaryStage.setTitle(“Hello World”); File file […]

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″ 但我认为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? 我会调查一下。

ProGuard打破了JavaFX应用程序

我正在尝试模糊我的JavaFX应用程序,但它失败了。 生成的结果不起作用,我不明白为什么。 生成的jar只是失败,因为fxml文件不能再加载所有导入(ClassNotFoundException)。 部署工作流程: 构建可运行的jar(在IntelliJ knwon中作为工件) 使用ProGuard混淆该jar 修复ProGuard无法完成的jar中的一些问题 1)最小的示例应用程序 示例应用程序’GuardTest’是一个IntelliJ项目,由3个类组成。 sample.Main:包含应用程序入口点并加载GUI fxml文件’sample.fxml’ sample.Controller:’sample.fxml’的控制器类 controls.CustomControl:一个从HBoxinheritance的简单javafx控件。 这在’sample.fxml’中使用 ‘sample.fxml’的内容: 2)混淆 现在我使用ProGuard生成从上面的项目生成的jar文件。 我使用以下设置: -target 8 -injars ./out/artifacts/JavaFXApp/JavaFXApp.jar -outjars ./out/obfuscated/Obfuscated.jar -ignorewarnings -printmapping ./out/obfuscated/proguard.map -dontusemixedcaseclassnames -dontshrink -dontoptimize -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers #-flattenpackagehierarchy -repackageclasses ‘p’ -allowaccessmodification -libraryjars “/lib/rt.jar” -libraryjars “/lib/javaws.jar” -libraryjars “/lib/ext/jfxrt.jar” -adaptresourcefilecontents **.fxml,**.properties,META-INF/MANIFEST.MF,images/*.jar,publicCerts.store,production.version -keepattributes javafx.fxml.FXML,Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod -keepclassmembers class * { @javafx.fxml.FXML *; } -keepclassmembernames […]

两个JavaFx控制器之间的通信

我制作了一个控制器和视图(fxml)的结构,以尽可能多地分离我的代码,我想知道如何在2个控制器之间进行通信。 我的意思是,控制器必须调用另一个控制器的某些function来将其设置为最新。 我认为我当前结构的模式将更加明确: 控制器1 / \ fx:include fx:include / \ Controller2 Controller3 每个控制器都有自己的fxml视图。 – 控制器1:容器控制器,其TabPane元素带有2个选项卡(每个选项卡对应1个控制器) – 控制器2:列表 – 控制器3:表格 您可能已经猜到我希望我的表单(控制器3)自动更新我的列表(控制器2)。 目前,表单只是一个“创建表单”,所以我只想在列表中添加行。 我已经尝试使用FXMLoader获取我的Controller 2并调用函数来重新启动我的tableView,但没有成功。 控制器1(.java + .fxml): package pappu.controllers; import pappu.core.controller.AbstractController; public class FolderController extends AbstractController { } 控制器2(.java + .fxml): package pappu.controllers; import java.net.URL; import java.util.Date; import java.util.List; import java.util.ResourceBundle; import org.hibernate.Session; import javafx.beans.property.SimpleStringProperty; import […]

如何控制JavaFX Tooltip的延迟?

我正在玩JavaFX Tooltip 。 我意识到,就我个人而言,徘徊在某些东西和实际出现的工具提示之间的延迟太长了。 API中的内容显示: 通常,当鼠标在控件上移动时,工具提示会“激活”。 工具提示变为“激活”和实际显示之间通常存在一些延迟。 详细信息(例如延迟量等)留给Skin实现。 经过一些进一步的调查后,我无法找到任何控制此行为的可能性。 JavaFX CSS Reference没有关于延迟时间的信息, getCssMetaData()的运行时评估也没有帮助。 我知道,有一种方法可以通过onMouseEntered和onMouseExited手动控制工具提示,但是真的没有办法吗? 或者我错过了一个明显的选择?

Action上的Java FX fxml

我想在我的Controller类中定义的按钮中添加一个方法 在控制台中只是一个错误,告诉我它找不到该方法 这是代码 sample.fxml 和Controller.java package sample; import javafx.fxml.FXML; import javafx.fxml.Initializable; import java.awt.event.ActionEvent; import java.net.URL; import java.util.ResourceBundle; public class Controller implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { } @FXML private void test(ActionEvent event) { System.out.println(“lollolol”); } }

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

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

如何从JavaFX中的另一个控制器类访问UI元素?

我有一个用NetBeans 8编写的JavaFX / Java 8应用程序(没有SceneBuilder )。 我的应用程序有一个主窗口,它有自己的FXML文件(primary.fxml)和它自己的控制器类(FXMLPrimaryController.java)。 FXML中的一个项目是TextArea 。 FXMLPrimaryController.java中的一些方法是关于附加到TextArea 。 此应用程序现在生成第二个窗口(另一个“阶段”),其中包含自己的FXML(second.fxml)和自己的控制器类(FXMLsecondController.java)。 在第二个控制器类中,如何访问主要的TextArea? 以下是相关代码的示例: primary.fxml: FXMLPrimaryController.java: public class FXMLPrimaryController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { } @FXML private TextArea myArea; final public void writeToTextArea() { myArea.appendText(“hi!”); } @FXML private void openSecondWindow(ActionEvent event) throws Exception { Group root = new Group(); […]