我想让我的未装饰的场景可以拖拉。我的根布局包含带有控件和内容的工具栏。我为工具栏提供了id,并为其设置了控制器。fxml布局。然后我做了所有的步骤,比如在JavaFX中拖动一个未修饰的阶段,但当我尝试调用EffectUtilities时,我有空指针。makeDraggable(舞台、工具栏);代码如下:
主要的
public class UpdaterMain extends Application{
private Stage primaryStage;
private BorderPane rootLayout;
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
this.primaryStage.initStyle(StageStyle.UNDECORATED);
this.primaryStage.initStyle(StageStyle.TRANSPARENT);
initRootLayout();
showContentOverview();
}
/**
* Initializes the root layout.
*/
public void initRootLayout() {
try {
// Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(UpdaterMain.class.getResource("RootLayout.fxml"));
rootLayout = (BorderPane) loader.load();
// Show the scene containing the root layout.
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);
UpdaterMainController controller =
loader.getController();
controller.registerStage(primaryStage); <<--Here is NPE
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Shows main content
*/
public void showContentOverview() {
try {
// Load person overview.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(UpdaterMain.class.getResource("updater-layout.fxml"));
SplitPane contentOverview = loader.load();
// Set person overview into the center of root layout.
rootLayout.setCenter(contentOverview);
} catch (IOException e) {
e.printStackTrace();
}
}
public Stage getPrimaryStage() {
return primaryStage;
}
public static void main(String[] args) {
launch(args);
}
}
控制器
import com.iminegination.utils.EffectUtilities;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ToolBar;
import javafx.stage.Stage;
public class UpdaterMainController {
@FXML
private ToolBar tool_bar;
public void registerStage(Stage stage) {
EffectUtilities.makeDraggable(stage, tool_bar); <<--Here is NPE (tool_bar is null, but why?)
}
public UpdaterMainController() {
}
}
layout.fxml
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="690.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.iminegination.updater.view.UpdaterMainController">
<top>
<ToolBar id="tool_bar" nodeOrientation="RIGHT_TO_LEFT" prefHeight="40.0" prefWidth="200.0">
<items>
<Button id="exitButton" mnemonicParsing="false" text="X" onAction="#click"/>
<Button mnemonicParsing="false" text="Settings" />
<Button mnemonicParsing="false" text="_" />
</items>
</ToolBar>
</top>
</BorderPane>
您需要为FXML中的控件定义一个fx: id
属性。
在FXML中,您有:
<ToolBar id="tool_bar" . . .
您应该:
<ToolBar id="tool_bar" fx:id="tool_bar" . . .
id定义CSS id。
fx:id定义了FXML和控制器变量名之间的链接。
和访问字段,如: 因为我希望有更好的方法来做到这一点。
这让我的头撞到了墙上!!!!希望有人能给我指出正确的方向。我确信我在做一些完全愚蠢的事情。我找了又找,但似乎找不出为什么这不管用!!(在IntelliJ IDE 15.x上使用JDK8.x和Scenebuilder)。我试图在GUI上显示数据,但希望access通过编程将这些数据从其他类/方法发送给它。。。。下面是一个简单的概念,我在着手更大的项目之前,正试图让它发挥作用: 我的简单GUI在FXM
null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我
背景:我创建了一个JavaFX应用程序,使用JFXPanel嵌入到Swing框架中。我一直在使用Eclipse作为IDE。“主应用程序”是另一个类,它仅用于创建一个类的实例,该类扩展 以在实例化时加载我的 .fxml 文件。从 Eclipse 执行主类时,一切都很好,我的 .fxml 文件中指定的 fx:controller 有它的 方法调用(我可以从它在加载时对 UI 所做的更改中看出),并且没
问题内容: 我有一个具有自己的控制器的指令。请参见以下代码: 这旨在成为错误/通知/警告的通知系统。我想做的是从另一个控制器(不是指令控制器)调用此控制器上的函数。当我这样做时,我还希望我的链接函数检测到某些属性已更改并执行了一些动画。 这是一些代码来举例说明我要的内容: 所以打电话时开启指令控制器,链接功能也应该被触发,执行动画。我该如何实现? 问题答案: 这是一个有趣的问题,我开始考虑如何实现
问题内容: 使用SceneBuilder。我有2个阶段,每个阶段都有一个控制器: , 。 Stage1Controller: Stage2Controller: 这是使用2种方法 (称为in 方法)将这两个fxml文件加载到Main.java类中的方式: 该方法在第一阶段中用作方法,它在两个阶段都转换视图。 如何输入方法?谢谢 问题答案: “快速又脏”的方法是给的引用: 现在在您的主应用程序中: