我使用javafx 和fxml,所以我使用控制器进行实际编码.我需要在舞台上做一些操作,例如获得x轴或y轴位置.我曾尝试stage.getX()和stage.getY,但他们不工作(艺名为高lited为错误).如何在控制器中使用此类功能?我尝试在我的主文件中执行此操作:
public int locationX = stage.getX();
Run Code Online (Sandbox Code Playgroud)
和
public double locationX = stage.getX();
Run Code Online (Sandbox Code Playgroud)
但它不起作用,反而使整个程序成为一个大错误.
那么如何在我的控制器文件中执行此类功能呢?我是否需要以其他方式导入某些内容或执行上述操作?
error: cannot find symbol
locationX = stage.getX();
symbol: variable stage
location: class FXMLController
Run Code Online (Sandbox Code Playgroud)
我知道"舞台"缺失了.但是如何在我的控制器中获得"舞台"?
我有以下代码:
Parent parent = FXMLLoader.load(Main.class.getResource("JanelaPrincipal.fxml"));
Run Code Online (Sandbox Code Playgroud)
在fxml文件中有一个对控制器类的引用.如何获取控制器对象?
FXML:
<AnchorPane id="AnchorPane" fx:id="root"
prefHeight="768.0" prefWidth="1024.0" xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/2.2"
fx:controller="br.meuspila.javafx.JanelaPrincipalController">
...
Run Code Online (Sandbox Code Playgroud) 考虑以下样本.
如何访问控制器中应用程序的参数/参数?
谢谢.
注意:我曾尝试将App.java和MyController.java混合在一个Class文件中,但没有帮助.
App.java(简化):
public class App extends Application {
public static void main(String[] args) {
Application.launch(App.class, args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// output arguments in console
System.out.println(getParameters().getNamed().toString());
Parent root = FXMLLoader.load(getClass().getResource("MyView.fxml"));
final Scene scene = new javafx.scene.Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
MyController.java(简化):
public class MyController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
// HOW TO getParameters() HERE ?
}
@FXML
private Button myButton;
@FXML
private void my_Action(ActionEvent event) { …Run Code Online (Sandbox Code Playgroud) 我制作了一个控制器和视图(fxml)的结构,以尽可能多地分离我的代码,我想知道如何在两个控制器之间进行通信.我的意思是,控制器必须调用另一个控制器的某些功能来将其设置为最新.
我认为我当前结构的模式将更加明确:
控制器1
/ \
fx:包括fx:include
/ \
Controller2 Controller3
每个控制器都有自己的fxml视图.
- 控制器1:一个容器控制器,其TabPane元素带有2个选项卡(每个选项卡对应1个控制器)
- 控制器2:列表
- 控制器3:表单
您可能已经猜到我想要我的表单(控制器3)自动更新我的列表(控制器2).目前,表单只是一个"创建表单",所以我只想在列表中添加行.
我已经尝试使用FXMLoader获取我的Controller 2并调用函数来重新启动我的tableView,但没有成功..
控制器1(.java + .fxml):
package pappu.controllers;
import pappu.core.controller.AbstractController;
public class FolderController extends AbstractController
{
}
Run Code Online (Sandbox Code Playgroud)
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<VBox fx:id="view" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="pappu.controllers.FolderController">
<TabPane>
<tabs>
<Tab text="RECHERCHE">
<content>
<AnchorPane id="Content">
<children>
<fx:include source="FolderList.fxml" />
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="DOSSIER">
<content>
<AnchorPane id="Content">
<children>
<fx:include source="FolderFormAdd.fxml" />
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</VBox>
Run Code Online (Sandbox Code Playgroud)
控制器2(.java + .fxml):
package …Run Code Online (Sandbox Code Playgroud) 我正在搜索一个EventListener或方法,它将在我加载FXML文件时运行.
JavaFX有类似于Javascript onLoad的东西吗?
我只想运行一个方法来清除TextFields中的任何数据.
JavaFX存在一个应用程序,应用程序从以下Main.class文件开始extends Application:
public class Main extends Application {
/**
* Keep a reference to the main Stage
*/
public static Stage stage;
/**
* MainScene Controller
*/
public static MainScene mainSceneController;
/**
* The Capture Window of the application
*/
public static CaptureWindow captureWindowController;
/**
* Settings Scene Controller
*/
public static SettingsController settingsController;
@Override
public void start(Stage primary) throws Exception {
stage = primary;
..........
// CaptureWindow
FXMLLoader loader1 = new FXMLLoader(getClass().getResource("/fxml/CaptureWindow.fxml"));
loader1.load();
captureWindowController …Run Code Online (Sandbox Code Playgroud) 我有多个在SceneBuilder中创建的FXML文件和一个控制器文件.当我在一个场景中编辑一个值(例如,一个整数值),然后切换场景时,在新场景中似乎没有更改该值.
当为场景加载fxml文件时,我的程序是否仅为fxml文件加载了控制器文件的副本(并且仅由其使用)?
非常感谢你们能回答这个问题的任何帮助.
我正在尝试使用 JavaFX 打开多个窗口,我有一个事件侦听器,可以在单击按钮时打开一个新窗口,如下所示:
@FXML
private void joinAction() {
Parent root;
try {
Stage stage = (Stage) joinButton.getScene().getWindow();
stage.close();
root = FXMLLoader.load(getClass().getResource("main.fxml"));
stage = new Stage();
stage.setTitle("TuneUs");
stage.setScene(new Scene(root));
stage.show();
} catch (IOException e) {e.printStackTrace();}
}
Run Code Online (Sandbox Code Playgroud)
第一个窗口打开,新窗口打开,但我的问题是让事件与我的第二个窗口一起工作
在main.fxml我有这一行:
<TextField id="chat_bar" onAction="#sendChat" layoutX="14.0" layoutY="106.0" prefHeight="22.0" prefWidth="403.0"/>
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器类中我有这个方法:
@FXML
private void sendChat() {
System.out.println("test");
}
Run Code Online (Sandbox Code Playgroud)
但 Intellij 告诉我;没有为顶级元素指定控制器
所以,我的问题是:我是否需要创建多个控制器类,或者我可以为多个窗口只使用一个类吗?
我正在使用javafx编写应用程序.这是一个"多屏"应用程序,带有一个主菜单,可以从中切换场景.
我的场景在不同的fxml文件中定义.
因为我尝试使用mvc模式我没有在fxml文件中设置控制器,我在FXMLloader上使用setController.
一切都运行正常,但我在单独的控制器和单独的fxml文件中有onmen的mainmenu及其所有功能.
我试过了
<fx:include source="Menubar.fxml"/>
Run Code Online (Sandbox Code Playgroud)
并为fxml文件创建了一个控制器,当我在fxml文件中设置控制器时,我无法编译源代码.如何为包含的fxml文件设置控制器?
startpage.fxml获取其控制器"Startpage"
FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));
loader.setController(new Startpage(m));
Pane mainPane = loader.load();
Run Code Online (Sandbox Code Playgroud)
startpage.fxml包括menubar.fxml,如何为菜单栏控件设置控制器?或者如何在每个其他控制器中轻松包含menubarController?
我正在尝试使用 JavaFX 2 和 Spring Boot 创建新应用程序,但到目前为止,我的简单应用程序(如 hello world)尚未运行,因为MainPaneController.
MainPaneController 类:
public class MainPaneController implements Initializable {
public static final String VIEW = "/fxml/Scene.fxml";
@FXML
private Node root;
@FXML
private Label label;
@PostConstruct
public void init() {
}
public Node getRoot() {
return root;
}
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
label.setText("Hello World!");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Run Code Online (Sandbox Code Playgroud)
主类FxBootApplication:
@SpringBootApplication
public class FxBootApplication extends Application {
private …Run Code Online (Sandbox Code Playgroud) javafx ×7
java ×6
fxml ×5
javafx-2 ×4
controller ×3
events ×1
location ×1
spring ×1
spring-boot ×1