我想在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) 我有一个使用SceneBuilder 2.0创建的fxml文件.这个文件在我使用Netbeans 8开发的JavaFx项目中使用.今天,SceneBuilder停止使用我的文件.当我尝试打开它时,SceneBuilder会最小化并且不会打开文件.我的场景图中没有任何自定义组件.
我将文件的内容复制到一个新的fxml文件中并给它一个新名称.然后,SceneBuilder能够打开此文件,即使内容与无法打开的文件相同.
这里发生了什么?
我道歉,但我无法发布fxml文件的内容.
我正在尝试学习JavaFX 2.0 + FXML,我发现制作fxml文件有点不舒服,不知道我可以放入什么,我不能.我的意思是FXML中哪些标签是可能的,哪些属性是evety标签?值evety属性可以具有哪些值,等等.Web中有一些示例,但它们没有显示FXML的漏洞功能.我曾尝试将NetBeans和Eclipse插件用于JavaFX 2.0,但是,它们都没有FXML的任何内容,它们只是验证开放式标签和其他简单的东西,这是evety XML编辑器可以做到的.也许我错误地配置了这些插件.那么,是否有任何文献显示FXML的完整参考(所有标签,属性及其可能值)?
我最近在启动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?我会调查一下.
我正在创建一个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文件放在主资源文件夹的相应目录中:

但我仍然有一个错误.
我正在玩JavaFX Tooltip.我意识到,就个人而言,徘徊在某些东西和实际出现的工具提示之间的延迟太长了.API中的内容显示:
通常,当鼠标在控件上移动时,工具提示会"激活".工具提示变为"激活"和实际显示之间通常存在一些延迟.详细信息(例如延迟量等)留给Skin实现.
经过一些进一步的调查,我无法找到控制此行为的任何可能性.在JavaFX的CSS参考没有关于延迟时间和运行时间,评价信息getCssMetaData()没有帮助.
我知道,有一种方法可以通过onMouseEntered和手动控制工具提示onMouseExited,但是真的没有别的方法吗?或者我错过了一个明显的选择?
各位晚上好,
我已经在这个主题上发现了很多帖子,但我仍然无法将一个对象从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) 在这个 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) 我在SceneBuilder中为我的JavaFX应用程序创建了一个视图.我希望我的观点最大化.如何在SceneBuilder或.fxml文件中实现此目的?