所以,我想要做的是,使用fxml创建一个自定义元素,然后将该元素的几个实例添加到容器中,如GridPane."new"运算符对我不起作用,因为我想使用@fxml注释器来访问该元素.克隆会很好,但它不起作用.当在for()contruct中使用添加许多元素时,FXMLLoader非常慢.如果我可以写一个fxml parentnode的引用,它可以从控制器调用,那将是完美的.
对不起...这里伪...
public class Controller implements Initializable {
@FXML
private VBox stack;
@FXML
private Button button;
@FXML
private void Change(KeyEvent event) throws IOException {
for (int i=0; i<10; i++){
stack.getChildren().add(button);
}
}
}
Run Code Online (Sandbox Code Playgroud)
将THE按钮添加到VBox是没有问题的.但是在for-contruct中(添加多于一个按钮)它失败了.我可以在for构造中使用new运算符,但我想知道,如果这是唯一的可能性.我认为必须有另一种方式,例如使用@FXML注释器"获取"按钮然后复制它.
我开始玩JavaFX 2了,我真的很喜欢用FXML创建UI的简易性.但是,一旦您通过基本示例并且需要具有许多窗口的UI,将整个应用程序的UI定义放在单个FXML文件中似乎是不合逻辑的.
是否可以在单独的FXML文件中编写单独的组件,然后根据需要包含它们?比如说,当用户点击主菜单中的项目时,我想要一个窗口弹出; 我可以在单独的FXML文件中编写该窗口的定义,在运行时加载它并将其添加到节点树吗?
是否有可能将舞台固定在桌面上?
我想将我的应用程序表现为小部件,因此当它启动时,它应该显示在桌面的正上方,而不是在可能打开的当前应用程序的前面.
小部件的另一个条件是它在任务栏中没有条目.这也可能吗?
我写了一个FXML文件,我在其中使用自定义组件,扩展了Group.加载此自定义组件时,应该将一些子项(此处为:MyOverlayIcon)添加到其子列表中,并按代码设置一些属性(此处为:layoutX和layoutY).
public class MyIcon extends Group {
/********************************
* Graphic
********************************/
private ImageView graphic;
public ImageView getGraphic() {
if(graphic == null) {
graphic = new ImageView();
getChildren().add(graphic);
// Send image to back:
graphic.toBack();
}
return graphic;
}
/********************************
* DataPath
********************************/
private Property<String> dataPath;
public Property<String> dataPathProperty() {
if (dataPath == null) {
dataPath = new SimpleStringProperty();
}
return dataPath;
}
public String getDataPath() {
return dataPathProperty().getValue();
}
public void setDataPath(String dataPath) {
this.dataPathProperty().setValue(dataPath);
getGraphic().setImage(new Image(dataPath));
}
/********************************
* …Run Code Online (Sandbox Code Playgroud) 我正在开发一个企业级项目,JavaFX 8被选为前端技术.目标平台是基于Windows的平板电脑,因此性能更可能是一个问题.
该应用程序由几十个屏幕(基本上是表单)组成,并决定将GUI描述拆分为无数的FXML文件,采用一种基于组件的方法(屏幕内的一些子窗格将被定义)例如,在他们自己的fxml中).Spring还用于插入所述组件内的控制器和服务.
主要的问题是,现在,启动时加载了200多个fxml(对于客户端应用程序),这需要大约20秒才能完成...这有点太明显了:(
我已经排除了Spring开销作为罪魁祸首(我们有一个Spring感知的FXMLLoader实现,但大部分时间都花在了load方法中).
我想知道这是否是正确的方法......在加载太多FXML文件时是否存在"可扩展性"问题?在JavaFX应用程序中尝试加载/缩小fxml的fxml数量的建议限制?
欢迎提出此性能问题的任何提示或类似情况反馈!谢谢.
我正在寻找Oracle FXML规范,参考手册或只是用户指南。我遇到过很多使用文字名称的书籍和博客,而在Google,Stackoverflow,Wikipdeia或JavaFX页面上没有任何内容可以链接到此类文档。我最近到达的是一种帮助页面:
一个类似的stackoverflow问题:
拥有几票,因为这些链接对您有所帮助,因此我不再重复。引用的主要参考文献是JavaFX API JavaDoc,它绝对不是我想要的东西,因为处理JavaFX类只是在谈论将标签作为对象。
我正在寻找标签的含义,组合规则等的FXML规范。不仅仅是标签可以建模的类中实现的内容。我还觉得,如果那里有带有“ FXML规范”一词的书籍,博客和会议论文,那么该文档应该退出。 不是吗
我正在尝试使用Scene Builder来处理我正在处理的复杂GUI,为了简单起见,我试图将窗口的高度和宽度修复为用户屏幕高度的一半.
我遇到的问题是Scene Builder不允许我在"Pref Width"和"Pref Height"字段中输入自定义值,只允许我输入"USE_COMPUTED_SIZE"行的内容
直接查看FXML文件,我发现了这个:
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="0.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="sudokusolver.FXMLDocumentController">
Run Code Online (Sandbox Code Playgroud)
但是我无法在任何地方找到"-Infinity"的替换值.我正在努力做一些事情:
Screen.getPrimary().getVisualBounds().getHeight() / 2;
Run Code Online (Sandbox Code Playgroud)
关于如何自定义这样的值的任何提示或想法?
我有一个ButtonBar带有两个按钮的JavaFX (通过SceneBuilder创建).
我希望其中一个按钮左对齐,另一个按钮右对齐.(见截图)
从文档中我已经知道如何在java-source-code中实现这一点:
ButtonBar.setButtonData(newButton, ButtonData.LEFT);
Run Code Online (Sandbox Code Playgroud)
我想知道如何实现这一点而不必在我的java文件中写这个,但
我如何使用SceneBuilder或相应的fxml文件来实现这一点.
我的.fxml文件目前看起来像这样:
<ButtonBar>
<buttons>
<Button text="New" />
<Button text="Save" />
</buttons>
</ButtonBar>
Run Code Online (Sandbox Code Playgroud)
*我在Windows上
**这个答案不是我想要的,因为他正在使用ToolBar,但我想知道如何使用ButtonBar(并且他的方法不适用于ButtonBar)
我有一个listview.我想更改背景颜色和文本填充.我尝试过以下操作:
playlistView.setStyle("-fx-background-color: blue; -fx-text-fill: black;");
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.但是,以下是有效的:
playlistView.setStyle("-fx-font-size: 24px; -fx-font-family: 'SketchFlow Print';");
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何让背景和文本填充工作吗?谢谢.