JavaFX 获取控件问题?

发布于 2022-09-04 23:03:18 字数 461 浏览 16 评论 0

用javaFX开发桌面应用遇到以下问题,
fxml里定义界面
图片描述
在java程序里获取fxml定义的界面并显示
clipboard.png
问题:我想获取fxml里定义的button控件和webview控件,查了很多资料还是没明白该怎么做?
难道JavaScript的getElementById和Android的findViewById在JavaFX里面没有嘛?

谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泅渡 2022-09-11 23:03:19

我写了个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);
    }

}
流云如水 2022-09-11 23:03:19

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

类似js和Android中的方法可以使用:
Button button = (Button)parent.lookup("#myButton");

泪之魂 2022-09-11 23:03:19

stage.getScene().getRoot().getChildrenUnmodifiable(),得到一个ObservableList对象,这个ObservableList对象里的控件元素顺序与你的XML元素定义的顺序一致,然后便可以通过list.get(int index)得到你所需的控件。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文