用javaFX开发桌面应用遇到以下问题,

fxml里定义界面

e1cd158fe08f8f13c0d466deb8fdbac7.png

在java程序里获取fxml定义的界面并显示

369030dd237dfaf5595286a10590b134.png

问题:我想获取fxml里定义的button控件和webview控件,查了很多资料还是没明白该怎么做?

难道JavaScript的getElementById和Android的findViewById在JavaFX里面没有嘛?

谢谢

我写了个Demo,你看一下注释就能够明白了

FXMLDocument.fxml文件

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>

<?import javafx.scene.*?>

<?import javafx.scene.web.*?>

<?import javafx.scene.text.*?>

<?import javafx.scene.control.*?>

<?import java.lang.*?>

<?import javafx.scene.layout.*?>

<!-- 通过fx:controller="fxml.login.FXMLExampleController绑定controller -->

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"

minWidth="-Infinity" prefHeight="210.0" prefWidth="350.0"

xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"

fx:controller="fxml.login.FXMLExampleController">

<children>

<!-- 通过fx:id绑定控件,onMouseClicked="#click"绑定事件 -->

<Button fx:id="button" alignment="CENTER" contentDisplay="BOTTOM"

mnemonicParsing="false" onMouseClicked="#click" text="按钮"

textAlignment="CENTER" wrapText="true">

<font>

<Font size="14.0" />

</font>

<cursor>

<Cursor fx:constant="DEFAULT" />

</cursor>

</Button>

</children>

</VBox>

FXMLExampleController.java文件

package fxml.login;

import fxml.alert.Alert;

import javafx.fxml.FXML;

import javafx.scene.control.Button;

import javafx.stage.Stage;

public class FXMLExampleController {

@FXML

private Button button;// fx:id="button"

@FXML

protected void click() throws Exception {//onMouseClicked="#click"

button.setText("Hahahahah");

System.out.println("hello");

Alert alert = new Alert();

alert.start(new Stage());

alert.stop();

}

}

FXMLExample.java 启动文件

package fxml.login;

import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;

public class FXMLExample  extends Application {

@Override

public void start(Stage primaryStage) throws Exception {

//载入布局

Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

Scene scene = new Scene(root);

primaryStage.setTitle("FXML Welcome");

primaryStage.setScene(scene);

primaryStage.show();

}

public static void main(String[] args) {

launch(args);

}

}

在fxml中设置fx:controller,然后控件设置fx:id,然后在Controller中使用@FXML注解相应的控件对象。

类似js和Android中的方法可以使用:

Button button = (Button)parent.lookup(“#myButton”);

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐