我一直试图弄清楚如何在另一个FXML文件中处理一个FXML文件。但我有个例外。:(这是我的内部FXML(视图包中的newinside.FXML):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="305.0" prefWidth="360.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="controller.NewInsideController">
<children>
<Button fx:id="newBtn" layoutX="30.0" layoutY="202.0" mnemonicParsing="false" onAction="#btnClick" text="Button" />
<TextField fx:id="newTxt" layoutX="30.0" layoutY="134.0" prefHeight="25.0" prefWidth="280.0" />
<Label fx:id="newLbl" layoutX="30.0" layoutY="62.0" prefHeight="17.0" prefWidth="280.0" />
</children>
</AnchorPane>
package controller;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class NewInsideController implements Initializable{
@FXML public static Label newLbl;
@FXML public static TextField newTxt;
@FXML public static Button newBtn;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
private void btnClick(ActionEvent e){
System.out.println("Button is clicked!");
newLbl.setText(newTxt.getText());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="380.0" prefWidth="529.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="controller.NewController">
<children>
<fx:include source="NewInside.fxml" />
</children>
</AnchorPane>
这是它的控制器(controller包中的newController.java):
package controller;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
public class NewController implements Initializable {
/*@FXML private Label newLbl;
@FXML private Button newBtn;
@FXML private TextField newTxt;
*/
@Override
public void initialize(URL location, ResourceBundle resources) {
}
/*@FXML
public void btnClick(ActionEvent e){
newLbl.setText(newTxt.getText());
}*/
}
最后,这是应用程序包中的main.java:
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/view/New.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
当我单击该按钮时,它给了我很长的异常:“线程中的异常”JavaFX应用线程“java.lang.RuntimeException:java.lang.Reflect.InvocationTargetException.........造成的原因:controller.newinSideController.btnClick(newinSideController.java.27)...57更多”
请帮帮我!:(
正如@inge所建议的,使用静态字段不是正确的方法。另外,您应该使用public
,而不是private
。如果需要公开控件,请使用它们的属性。
你可以在这里读到原因:
@FXML private Label newLbl;
@FXML private TextField newTxt;
@FXML private Button newBtn;
public StringProperty newLblText() {
return newLbl.textProperty();
}
public StringProperty newTxtText() {
return newTxt.textProperty();
}
public StringProperty newBtnText() {
return newBtn.textProperty();
}
若要从NewController
获取NewInsideController
的有效实例,请单击此链接。首先修改new.fxml
:
<fx:include fx:id="newInside" source="NewInside.fxml" />
现在您可以获得一个实例,并添加一些具有以下属性的侦听器:
public class NewController implements Initializable {
@FXML
private Parent newInside;
@FXML
private NewInsideController newInsideController;
@Override
public void initialize(URL url, ResourceBundle rb) {
newInsideController.newBtnText().addListener(
(obs,s,s1)->System.out.println("nweBtn Text;" +s1));
if(newInsideController.newLblText().get().isEmpty()){
newInsideController.newLblText().set("Text for the textfield");
}
newInsideController.newTxtText().addListener(
(obs,s,s1)->System.out.println("s1 "+s1));
}
}
我有一个名为“AdjustmentBar”的类,它包括一个imageView、一个菜单栏和一些图片编辑函数(一个FXML文件和一个控制器)。AdjustmentBar被加载到另一个名为“ExaminationDisplayer”的类(也是一个FXML文件和一个控制器)。ExaminationDisplayer从一个在线MySQL数据库加载一些图像,我希望这些图像都显示在一个独立的ImageView
出于某种原因,当我尝试加载不同包中的FXML时,我得到了一个错误: 主应用程序。爪哇“ 文件夹结构: 错误消息:
所以,我一直试图将一个边框放在另一个边框(中心部分)中,但到目前为止没有成功。 我尝试过(在从FXML加载的窗格和父场景中): 使用并设置顶部、底部、左侧和右侧锚 在主边框的顶部和左侧添加(无效且在调整舞台大小时不起作用) 当前布局: 我正在寻找的结果(大致) 这个想法是,即使当我调整窗口大小时,FXML布局也将留在MainBorderPane的中心; LoginController.java l
更新 我试过很多解决办法,但都没有达到我的目标。应用程序加载UsersMainPageController,它只包含一个AnchorPane(类似于父控件),因此这是相关代码: [UsersMainPageController]
我有一个,我想把它放在BorderPane的底部并居中。我想用实现这一点。 这是我的边界窗格的底部: 完整的(没有导入):
我有一个关于JFrames和正确处理它们的快速问题。我有一个有多个关卡的游戏,我希望在使用新关卡创建另一个关卡时处理使用中的框架。 我目前正在开发的程序扩展了一个JFrame,这一直让我感到困惑,因为我不知道那个JFrame叫什么。 无论如何,我有另一个扩展JPanel的类。在这个类中,我有一个方法,当游戏状态完成时,删除所有实例并关闭JFrame。然而这不起作用,因为我无法获取框架的框架,相反,