在我的Guice模块中,我想关联FXML文件和它们的控制器,目前它看起来像这样:
public class GuiceModule extends AbstractModule
{
@Override
protected void configure()
{
// associate controllers and fxml files
bind(MainController.class).toInstance((MainController)loadController("/main.fxml"));
bind(SubController.class).toInstance((SubController)loadController("/content.fxml"));
}
protected Object loadController(String url)
{
InputStream fxmlStream = null;
try
{
fxmlStream = getClass().getResourceAsStream(url);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource(url));
loader.setControllerFactory(new Callback<Class<?>, Object>() {
public Object call(Class<?> clazz) { // clazz because class is a reserved word
return injector.getInstance(clazz); // PROBLEM: no access to the injector here
}
});
loader.load(fxmlStream);
return loader.getController();
}
// [..] exception handling
}
}**strong …Run Code Online (Sandbox Code Playgroud) 在Oracle教程http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm之后,我用片段创建FXML
<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<GridPane alignment="CENTER" gridLinesVisible="true" hgap="10.0" vgap="10.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="fxmlexample.FXMLExampleController" styleClass="root" >
...other stuff...
<stylesheets>
<URL value="@Login.css" />
</stylesheets>
</GridPane>
Run Code Online (Sandbox Code Playgroud)
NetBeans 8.0将URL着色为红色,并说:"类不存在:URL".
编译和运行时,JRE 1.8也会抛出异常:
...
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: URL is not a valid type.
file:/C:/Users/User1/Documents/NetBeansProjects/FXMLExample/dist/run1970052180/FXMLExample.jar!/fxmlexample/fxml_example.fxml:46
Run Code Online (Sandbox Code Playgroud)
如果我在JavaFX Scene Builder 1.1中 …
我想在JavaFX中更改Menu控件的文本颜色.目前,整个菜单栏的背景颜色设置为白色,显示菜单 -s 的默认文本颜色也是白色,所以我看不到实际控件,因此我想设置菜单的文本颜色("文件" ")黑色.我怎么做?
这是FXML部分:
<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml">
<children>
<MenuBar id="modBar" layoutX="176.0" layoutY="122.0" styleClass="modBar">
<menus>
<Menu id="modItem" mnemonicParsing="false" styleClass="modItem" text="File" />
</menus>
<stylesheets>
<URL value="test.css" />
</stylesheets>
</MenuBar>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
这是CSS部分:
.modBar
{
-fx-background-color: white;
}
.modItem
{
-fx-color: black;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用("文件"仍然是白色的).我究竟做错了什么?另外,我似乎无法将任何 CSS应用于.modItem - 它可以在 …
我使用JavaFX Scene Builder将一个ChoiceBox放在一个fxml中.
FXML有一个分配给它的控制器.
我的问题是:如果我想了解更改的值,我需要注册哪个事件?
onInputMethodTextChanged="#languageSelectionModified"
Run Code Online (Sandbox Code Playgroud)
这不适用于以下代码
public void languageSelectionModified(Event event) {
ChoiceBox<String> box = (ChoiceBox<String>) event.getSource();
System.out.println(box.getValue());
}
Run Code Online (Sandbox Code Playgroud)
这仅适用于初始点击(即打开列表,而不是选择项目时):
onMouseClicked="#languageSelectionModified"
Run Code Online (Sandbox Code Playgroud)
虽然鼠标事件永远不会是一个很好的选择,因为触摸或键盘是输入法的情况,它仍然证明可以到达System.out.
我绝对不知道这些东西在哪里被记录(在默认的Java-API中它们不是)
我想找到装有一个场景中的垂直框节点FXMLoader感谢Node#lookup(),但我得到以下异常:
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 !!!"));
}
}
Run Code Online (Sandbox Code Playgroud)
fxml文件:
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" >
<children>
<SplitPane dividerPositions="0.5" focusTraversable="true" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" …Run Code Online (Sandbox Code Playgroud) 我在 netbeans 中使用 javafx 场景构建器创建了一个 fxml 文件。
如何将 netbeans 中的 .fxml 文件转换为 .java?有什么程序可以转换它吗?
我在 fxml 方面不是很好,所以我想使用 .java 文件来编写我的 javafx 应用程序。
请帮我。谢谢
我想关闭然后重新启动已经运行的应用程序(自动),通过单击按钮或类似的东西,我想这样做是为了用其他语言重新启动应用程序,我是一般来说是JavaFx和Java的新手,请问您能为我解决这个问题吗?
我正在学习javaFX,我的问题是我有一些带有选择框和按钮的简单窗口。这个窗口是通过 FXML 定义的,它也与控制器类相关联。我想知道,如何用控制器类中的数据填充这个选择框,因为使用@FXML 引用这个选择框会抛出NullpointerEception
编辑 - 添加源代码 FXML 代码
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="240.0"
prefWidth="320.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="supermarket.ManageWindowCC">
<children>
<ChoiceBox fx:id="countChoiceBox" layoutX="44.0" layoutY="71.0" prefHeight="25.0" prefWidth="191.0"/>
<Label layoutX="44.0" layoutY="54.0" text="To change item's count, choose one"/>
<TextField layoutX="140.0" layoutY="129.0" prefHeight="25.0" prefWidth="24.0"/>
<Label layoutX="123.0" layoutY="112.0" text="New count"/>
<Button layoutX="126.1875" layoutY="171.5" mnemonicParsing="false" text="Submit"/>
</children>
Run Code Online (Sandbox Code Playgroud)
Java控制器代码:
public class ManageWindowCC {
@FXML
private ChoiceBox countChoiceBox;
public void onChangeCountClick(ActionEvent actionEvent) {
try {
Parent root = FXMLLoader.load(getClass().getResource("ChangeCount.fxml"));
Stage newStage = new Stage();
newStage.setTitle("Change …Run Code Online (Sandbox Code Playgroud) 我知道由于jewelsea,可以在TableView中创建一个充满按钮的列.
但我想知道是否可以直接在FXML中定义它.
例如,与其他类型的一个做:
班级人员:
private final SimpleStringProperty birthDate = new SimpleStringProperty("");
Run Code Online (Sandbox Code Playgroud)
然后在FXML中:
<TableView fx:id="table" layoutY="50.0" prefHeight="350.0" prefWidth="600.0">
<columns>
<TableColumn prefWidth="79.5" text="date of birth">
<cellValueFactory>
<PropertyValueFactory property="birthDate" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
Run Code Online (Sandbox Code Playgroud)
并且可以添加以下元素:
@FXML private TableView<Person> table;
//...
table.getItems().add("12/02/1452");
Run Code Online (Sandbox Code Playgroud)
如何用Buttons实现同样的目标?
我注意到从Control类继承的每个元素底部都有一个下划线.你可以在图片中看到它:
当我把焦点放在任何一个项目上时,该线条就消失了.为什么会这样,我怎么能摆脱它?
码:
Main.java
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
sample.fxml
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.ComboBox?>
<?import java.lang.String?>
<?import javafx.collections.FXCollections?>
<GridPane stylesheets="@sample.css"
xmlns:fx="http://javafx.com/fxml"
alignment="center">
<HBox>
<ProgressBar minWidth="100" progress="0.3"/>
<Button text="Button"/>
<Button text="Button"/>
<Button text="Button"/>
<ComboBox> …Run Code Online (Sandbox Code Playgroud)