- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对 SceneBuilder 和 Java FX 处理自定义控件的方式束手无策。
我是使用 fx:root,还是不使用它?我选择使用它。所以在控件的Controller+Root类,我把自己设置为root和 Controller ,根据需要。但它仍然说“根没有已设置。在加载之前使用方法 setRoot()。”
在将容纳自定义控件的父级 FXML 中,我是什么应该导入?
什么是正确的类路径以便我可以显示我的自定义SceneBuilder 2.0 中的控件?我不太明白根本就是“/.../.../.../bin”。
随着新<fx:include>
标签,是否有必要使用 <MyCustomControl />
在标记中了吗?
到目前为止,我的自定义控件只是一个进度指示器,以避免复杂化。
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.HBox?>
<fx:root type="HBox" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<ProgressBar fx:id="progressBar" prefWidth="200.0" progress="0.0" />
</children>
</fx:root>
package application.ctrl;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.HBox;
import application.Main;
它的 Controller :
public class ProgressSelector extends HBox {
@FXML
private ProgressIndicator progressBar;
public ProgressSelector() {
FXMLLoader loader = new FXMLLoader(getClass().getResource(
Main.PROGRESS_SELECTOR));
loader.setRoot(this);
loader.setController(this);
loader.setClassLoader(this.getClass().getClassLoader());
try {
loader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
}
父 FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.VBox?>
<?import application.ctrl.ProgressSelector?>
<VBox fx:id="vbox" spacing="5.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.ctrl.ObjectiveEditorCtrl">
<children>
<HBox>
<children>
<Button mnemonicParsing="false" onAction="#back" text="<" />
<Label text="Editing Objective:" />
</children>
</HBox>
<TextField fx:id="objectiveName" />
<ProgressSelector />
<HBox>
<children>
<Label text="Planned Start:" />
<Region HBox.hgrow="ALWAYS" />
<DatePicker fx:id="plannedStart" />
</children>
</HBox>
<HBox>
<children>
<Label text="Actual Start:" />
<Region HBox.hgrow="ALWAYS" />
<DatePicker fx:id="actualStart" />
</children>
</HBox>
<HBox>
<children>
<Label text="Planned Finish:" />
<Region HBox.hgrow="ALWAYS" />
<DatePicker fx:id="plannedFinish" />
</children>
</HBox>
<HBox>
<children>
<Label text="Actual Finish:" />
<Region HBox.hgrow="ALWAYS" />
<DatePicker fx:id="actualFinish" />
</children>
</HBox>
<HBox alignment="CENTER_RIGHT">
<children>
<Button mnemonicParsing="false" onAction="#save" text="Save" />
<Button mnemonicParsing="false" onAction="#back" text="Cancel" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
它的 Controller :
package application.ctrl;
import interfaces.ControlledScreenInterface;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import application.ScreenController;
import application.objects.Objective;
public class ObjectiveEditorCtrl implements Initializable,
ControlledScreenInterface {
@FXML
private TextField objectiveName;
@FXML
private ProgressSelector completion;
@FXML
private DatePicker plannedStart;
@FXML
private DatePicker plannedFinish;
@FXML
private DatePicker actualStart;
@FXML
private DatePicker actualFinish;
@FXML
private VBox vbox;
private ScreenController parent;
private Objective current;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
public void init(Objective current) {
this.current = current;
objectiveName.setText(current.getName());
// completion.setProgress(current.getCompletion());
plannedStart.setValue(current.getPlannedStart());
actualStart.setValue(current.getActualStart());
plannedFinish.setValue(current.getPlannedFinish());
actualFinish.setValue(current.getActualFinish());
}
public void save() {
// current.setName(objectiveName.getText());
// // current.setCompletion(completion.getProgress());
// current.setPlannedStart(plannedStart.getValue());
// current.setPlannedFinish(plannedFinish.getValue());
// current.setActualStart(actualStart.getValue());
// current.setActualFinish(actualFinish.getValue());
// back();
}
public void back() {
parent.back();
}
@Override
public void setParentScreen(ScreenController parent) {
this.parent = parent;
}
}
最佳答案
这里有很多问题。
1 - 使用 fx:root 允许您自定义 FXMLLoader,您可以更改实例化组件的方式:How to create multiple javafx controllers with different fxml files?
但是,对于 SceneBuilder 2,它根本无法正常工作! Scene Builder 2 的“规范”方式(适用于 1)似乎不使用 fx:root。
2 - 这取决于您在 1 中选择的模式。可以是 FXML 中具有显式导入或使用 fxml:include 的自定义 java 组件。首先是 FXML,然后是 Controller 。或者抽象组件(和 Controller 作为 fx:root),然后是 FXML。
3 - SceneBuilder 2 在类加载器方面存在很多问题,因为每个自定义组件都加载了不同的类加载器,这意味着您将运行很多类未找到的异常,如异常。修复它的一种方法是 fork SceneBuilder 以强制它对所有自定义组件仅使用一个类加载器:Custom Components in Scenebuilder 2.0
或者等待修复。或者不使用 fx:root 而更喜欢 fx:include。或者根本不使用 Scene Builder,这对于许多有效的解决方案都是有效的。
关于java - SceneBuilder 自定义控件类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24499984/
我是 JavaFX 的新手,我还没有找到关于这个问题的任何教程/答案。 所以基本上我想做的只是改变我场景的一部分。我想在顶部保留一个静态菜单栏,仅根据单击的菜单按钮更改底部。这意味着我需要为每个“页面
在我的 JavaFX 应用程序中,某些节点显示在预览中,但不可选择,也不会显示在层次结构中。 SceneBuilder 不可定位示例: 在此示例中,“名字”列不可定位,并且不会显示在层次结构中,即使它
我在使用场景生成器时遇到了奇怪的渲染问题,但前提是我从 ControlsFX 导入了 JAR。 正如您在以下视频中看到的: https://www.youtube.com/watch?v=dD1euL
我创建了这个自定义组件: public class IconButton extends Button { @FXML private ImageView imageView; pri
我下载了 Scene Builder,并尝试打开 .fxml 文件,但出现以下错误消息: Failed to launch SceneBuilder. The error message was: C
我刚刚从 Gluon 安装了 SceneBuilder,但无法启动它...它安装正确(我注意到安装程序没有到达末尾...但所有文件都在 AppData/Local 中正确)我尝试启动 EXE 但它不会
我安装了 SceneBuilder 8.3.0在安装了Java Hotspot 1.8.0_131的Ubuntu Gnome 17.04上,尝试启动时出现错误,无法初始化。我已经尝试安装Oracle的
不确定这是不是该问的地方。如果有更好的 SE 站点,请告诉我。 自从我开始使用 SceneBuilder 以来,它的子菜单就完全无法使用,因为一旦我移动光标选择一个选项,它们就会消失。 例如 - 假设
我对 SceneBuilder 和 Java FX 处理自定义控件的方式束手无策。 我是使用 fx:root,还是不使用它?我选择使用它。所以在控件的Controller+Root类,我把自己设置为r
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
在 JavaFX 中存在控件 ToggleGroup 。我已经安装了SceneBuilder,版本: Product Version JavaFX Scene Builder 8.0.0 Build
我的问题是,如何在 JavaFX 中根据应用程序窗口的大小实现在操作过程中自动调整图像大小?这可以直接在 SceneBuilder 中完成吗? 最佳答案 它将其 WidthProperty 和 Hei
我需要用 SceneBuilder 创建一个 GUI。我在我的界面中添加了一个 ImageView 并正确设置了我的图像的路径。图像显示在 SceneBuilder 中,但是当我运行我的应用程序时,图
这就是我正在尝试做的事情: 我想要一个显示 31 个 Pane 的场景,然后将用红色或绿色填充它们。 (点击它们应该改变颜色) 我现在想知道实现这一点的最佳方法是什么。我首先想到了 TableView
我在 SceneBuilder 打开我的 main.fxml 时遇到问题。当我运行项目时一切正常,但我无法在 SceneBuilder 下进行修改。每次我想添加到 main.fxml 时,我都需要删除
我正在使用 SceneBuilder 构建 javaFX 应用程序,问题是,当我在 fxml 文件中指定相对路径时,它会在运行时抛出异常: null/../images/text_formal.png
我正在尝试使用场景生成器创建的按钮切换场景。 这是我的 Controller 类 public class Controller implements Initializable { @FXM
我有一个非常简单的类,它获取作业列表并尝试用它们填充 TableView。我在不使用 FXML 的情况下完成了这项工作,但我现在正在尝试新方法。我遇到的问题是; tView.getItems().ad
我试图在 SceneBuilder 中重新创建库列表的外观,但我不知道我需要采用哪个元素。 如何重新创建此列表? 最佳答案 这是使用 ControlsFx Awesome Fonts 的草稿。 Mai
我希望有人能够向我解释为什么 SceneBuilder 在导入自定义控件时如此不稳定。 以一个相对简单的自定义控件为例(仅作为示例): public class HybridControl exten
我是一名优秀的程序员,十分优秀!