Java课设--学生成绩管理系统五

本文主要介绍了如何使用JavaFX构建学生成绩管理系统的界面,包括项目结构、界面开发工具配置、主界面和登录界面设计。通过Scene Builder设计界面,结合Controller实现交互逻辑。详细讲解了加载fxml文件、设置界面元素以及事件处理的方法。
摘要由CSDN通过智能技术生成

写在前面

上一节介绍了整个系统的主要功能,并使用工具类实现了这些功能。后面就会介绍界面的设计。主要是JavaFX的项目结构。这一节会介绍JavaFX的结构和主界面的设计

JavaFX项目结构

JavaFX项目的基础结构,这是一个新建的项目结构。一共有三个基本的文件。Main文件是整个应用程序的入口,sample.fxml是主界面的设计编码,Controller是sample的一个处理类,相当于你在sample里面定义的一些属性和点击事件方法,在Controller里面定义这些属性定义的事件逻辑。
在这里插入图片描述
sample,fxml里面有一个fx:controller是绑定一个控制器的,就是之前上面的Controller。每一个界面对应着一个自己的Controller
在这里插入图片描述
在这里插入图片描述
基本的结构我是这样设计的,一个controller包界面存放的是每一个界面对用的controller,用一个为view的包作为fxml文件的存放位置,里面都是界面的设计代码。类似这样的
在这里插入图片描述

二、界面开发工具的配置

因为界面是使用fxml文件写的,一般不需要我们自己去书写代码,只需要在Scene Builder上把界面设计好,使用它自带的自动生成代码就可以。
现进入官网下载对应的环境,选择自己电脑所对应的版本,直接安装就可以了。
在这里插入图片描述
安装后之后就会有一个类似的软件,不需要打开它,可以直接使用idea里面打开
在这里插入图片描述
然后我们就新建一个LoginFrame.fxml文件进行登陆主界面,然后右击选择在Scene Builder中打开
在这里插入图片描述
打开之后是一个类似于画板,直接进行拖拉选择需要的组件就可以了。
在这里插入图片描述
这个部分可以自己看一下组件是怎么调的,这个非常的简单,我就不多叙述了。

三、主界面的设计

因为为了简单,我直接将主界面设置为登陆的界面,有用户名、密码和选择对应的身份为主要元素,2个按钮,一个是登陆,另一个是重置。
在这里插入图片描述
每一个Label和Button等组件都可以设置一个自己的id,这是为了在controller可以找到并使用该属性。
比如Label等

<Label fx:id="userNameLabel" prefHeight="40.0" prefWidth="89.0" text="用户名:" />
<TextField fx:id="username" />

绑定对应的事件使用onAction="#loginEvent" 后面事件名称是在controller中定义的函数

 <Button fx:id="login" mnemonicParsing="false" onAction="#loginEvent" prefHeight="40.0" prefWidth="90.0" text="登陆">

基本上使用fxml需要用到的就是fx:idonAction这2个属性,前一个是标记每一个组件的名称,你可以根据名称去操作他们,后一个是事件,触发对应的操作。
我会根据一个具体的功能来介绍怎么去编写这类程序,后面的具体功能都是差不多的,就不啰嗦了。

三、登陆界面的设计

首先我们需要在Main函数里面定义一个主界面。

	private Stage primaryStage;
	@Override
    public void start(Stage primaryStage) throws Exception{
   
        this.primaryStage = primaryStage;
        primaryStage.setTitle("学生管理系统");
        initLoginFrame();
    }

这个界面本来只会弹出一个白色的框体,但是定义一个initLoginFrame();函数来获得登陆的界面。下面介绍一下这个函数的编写。先初始化一个FXMLLoader,使用这个可以加载fxml的文件,然后使用他的setLocation方法设置该页面的fxml文件,就相当于设置了这个界面。在使用load()方法加载,后面就是设置一些基础的属性,然后获取到这个界面的controller,将stage作为参数传递到控制器中,最后用show方法显示出来就可以了。

	/**
     * 登陆界面
     * @throws IOException
     */
    private void initLoginFrame() throws IOException {
   
        // 加载登录界面的fxml文件
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("view/LoginFrame.fxml"));
        AnchorPane root = loader.load();
        Scene scene = new Scene(root, 1000, 600);
        primaryStage.setTitle("登录");
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        // 获取登录界面的控制器类
        LoginController loginController = loader.getController();
        // 将stage作为参数传递到控制器中
        loginController.setStage(primaryStage);
        // 展示舞台
        primaryStage.show();
    }

然后就创建我们刚才设定的fxml的文件是在view/LoginFrame.fxml下,具体代码如下:
基本上大部分的代码都是自动根据scene buider自动生成。

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

<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.text.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="600.0" prefWidth="1000.0" GridPane.rowIndex="1" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="studentSystem.controller.LoginController">
    <children>
        <VBox layoutX="151.0" layoutY="-2.0" prefHeight="600.0" prefWidth="693.0">
            <children>
                <HBox alignment="CENTER" prefHeight="173.0" prefWidth="693.0">
                    <children>
                        <Label fx:id="systemName" alignment="CENTER" prefHeight="97.0" prefWidth="502.0" text=" 学生管理系统" textAlignment="JUSTIFY">
                            <font>
                                <Font name="System Bold" size="50.0" />
                            </font>
                        </Label>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="87.0" prefWidth="693.0">
                    <children>
                        <Label fx:id="userNameLabel" prefHeight="40.0" prefWidth="89.0" text="用户名:" />
                        <TextField fx:id="username" />
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="76.0" prefWidth="693.0">
                    <children>
                        <Label fx:id="passwordLabel" prefHeight="40.0" prefWidth="90.0" text="密码:" />
                        <PasswordField fx:id="password" />
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="62.0" prefWidth="693.0">
                    <children>
                        <Label fx:id="identityLabel" prefHeight="37.0" prefWidth="66.0" text="身份:">
                     <HBox.margin>
                        <Insets right="20.0" />
                     </HBox.margin></Label>
                        <ComboBox fx:id="comboBox" prefWidth="150.0" promptText="请选择">
                     <HBox.margin>
                        <Insets left="10.0" />
                     </HBox.margin></ComboBox>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="116.0" prefWidth="693.0">
                    <children>
                        <Button fx:id="login" mnemonicParsing="false" onAction="#loginEvent" prefHeight="40.0" prefWidth="90.0" text="登陆">
                            <HBox.margin>
                                <Insets right="20.0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值