combate o sistema Java governanta de faturamento (8) - Adicione interface e funções de Contas para conseguir

Esta cláusula Overview

 

Esta seção será adicionado nos registros contábeis.

 

preparatória

Adicionar registros alcançados nesta seção será utilizada na classificação consulta de informação, criando assim ClassificationDao.java classe dao no pacote, como segue:

package AccountSystem.dao;
​
import AccountSystem.bean.Classification;
​
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
​
public class ClassificationDao {
​
    /**
     * 通过收入或支出类型获取所有的分类信息
     *
     * @param classificationType 收入或支出分类
     * @return 返回得到的分类信息
     */
    public List<Classification> selectByType(String classificationType) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Classification> classificationList = new ArrayList<Classification>();
        try {
            //获得数据的连接
            conn = JDBCUtils.getConnection();
            //获得Statement对象
            stmt = conn.createStatement();
            // 拼接SQL语句
            String sql = "select * from tb_classification where cType='" + classificationType + "';";
            //发送SQL语句
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                Classification classification = new Classification();
                classification.setcId(rs.getInt(1));
                classification.setcName(rs.getString(2));
                classification.setcType(rs.getString(3));
                classificationList.add(classification);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.release(rs, stmt, conn);
        }
        return classificationList;
    }
}

 

implementar a interface

Deve primeiro concluir um recurso adicional em JavaFX, primeiro criar arquivos de visão FXML, em seguida, criar a classe controlador associado Controller, então o método de arquivos de visão carga FXML criados em MainApp, e, finalmente, recorrer a um evento .

Em vista addAccountFrame.fxml pacote criar arquivos e usar o design da interface Scene Builder, propriedades e eventos de cada método de controle referem-se os seguintes códigos:

<?xml version="1.0" encoding="UTF-8"?>
​
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="AccountSystem.controller.AddAccountFrameController">
    <children>
        <VBox alignment="CENTER" focusTraversable="true" layoutX="137.0" prefHeight="400.0" prefWidth="326.0"
              spacing="20.0">
            <children>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label fx:id="descriptionLabel" text="添加"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="类型:"/>
                        <HBox alignment="CENTER_LEFT" prefHeight="30.0" prefWidth="240.0" spacing="50.0">
                            <children>
                                <RadioButton fx:id="outputRadioButton" mnemonicParsing="false"
                                             onAction="#outputRadioButtonEvent" text="支出">
                                    <toggleGroup>
                                        <ToggleGroup fx:id="group"/>
                                    </toggleGroup>
                                </RadioButton>
                                <RadioButton fx:id="inputRadioButton" mnemonicParsing="false"
                                             onAction="#inputRadioButtonEvent" text="收入" toggleGroup="$group"/>
                            </children>
                        </HBox>
                    </children>
                </HBox>
                <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="金额:"/>
                        <TextField fx:id="moneyTextField" prefHeight="30.0" prefWidth="240.0" promptText="请填入金额:"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="分类:"/>
                        <ComboBox fx:id="classificationComboBox" onAction="#classificationComboBoxEvent"
                                  prefHeight="30.0" prefWidth="240.0" promptText="请选择分类:"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="备注:"/>
                        <TextArea fx:id="memoTextArea" prefHeight="200.0" prefWidth="240.0" promptText="请填入备注:"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="日期:"/>
                        <DatePicker fx:id="datePickerTextField" prefHeight="30.0" prefWidth="240.0"
                                    promptText="请选择日期:"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Button fx:id="addButton" mnemonicParsing="false" onAction="#addButtonEvent" text="添加"/>
                    </children>
                </HBox>
            </children>
            <opaqueInsets>
                <Insets/>
            </opaqueInsets>
            <padding>
                <Insets bottom="20.0"/>
            </padding>
        </VBox>
    </children>
</AnchorPane>

Em seguida, crie classe AddAccountFrameController.java no pacote controlador e copiado dos objetos Scene Builder e eventos no método de controle para a classe:

package AccountSystem.controller;
​
import AccountSystem.bean.Classification;
import AccountSystem.bean.Record;
import AccountSystem.bean.Session;
import AccountSystem.dao.ClassificationDao;
import AccountSystem.dao.RecordDao;
import AccountSystem.tools.PublicTools;
import AccountSystem.tools.SimpleTools;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
​
import java.util.List;
​
/**
 * 添加账目界面控制器
 *
 * @author lck100
 */
public class AddAccountFrameController {
    private PublicTools publicTools = new PublicTools();
​
    @FXML
    private String selectedRadioButton = null;
​
    @FXML
    private String selectedCoboboxItem = null;
​
    @FXML
    private Label descriptionLabel;
​
    @FXML
    private RadioButton outputRadioButton;
​
    @FXML
    private DatePicker datePickerTextField;
​
    @FXML
    private TextField moneyTextField;
​
    @FXML
    private RadioButton inputRadioButton;
​
    @FXML
    private TextArea memoTextArea;
​
    @FXML
    private ComboBox<?> classificationComboBox;
​
    /**
     * “添加”按钮的事件监听器
     *
     * @param actionEvent 事件
     */
    @FXML
    public void addButtonEvent(ActionEvent actionEvent) {
      
    }
​
    /**
     * “支出”单选按钮的事件监听器
     *
     * @param actionEvent 事件
     */
    public void outputRadioButtonEvent(ActionEvent actionEvent) {
       
    }
​
    /**
     * “收入”单选按钮的事件监听器
     *
     * @param actionEvent 事件
     */
    public void inputRadioButtonEvent(ActionEvent actionEvent) {
      
    }
​
    /**
     * ”分类“下拉列表框的事件监听器
     *
     * @param actionEvent 事件
     */
    public void classificationComboBoxEvent(ActionEvent actionEvent) {
       
    }
}

Código Descrição:

Você pode ver, existem quatro método de evento ouvinte acima, adicionar um manipulador de eventos do botão é bem compreendido que, quando o registro após o usuário inserir informações em uma tabela de banco de dados, mas os outros três métodos podem não entender por que eles querem ouvir. As "despesas" e "renda" ouvintes botão de rádio são semelhantes, porque "gastar" Há muitos diferentes classificações e que essas classificações são exibidas na caixa de listagem drop-down, a mesma classificação de todos "renda" também é exibido na caixa de listagem drop-down, é impossível classificar as receitas e despesas são apresentados em conjunto, os dois botões de rádio acima definição seria sem sentido, não haverá divisão de receitas e despesas.

Assim, quando o usuário seleciona o botão de opção "renda", todos nome da categoria de renda serão preenchidos na caixa de listagem drop-down, quando o usuário seleciona "gastar" botão de rádio, tudo vai nome da categoria de gastos para preencher o seguinte drop-down list box, permitindo que o usuário selecione categoria separadamente.

Drop-down list box monitorar dinamicamente eventos é fazer com que o nome da categoria selecionada pelo usuário.

As seguintes alterações irá demonstrar ouvir botões de rádio:

Clique em "Adicionar" para adicionar interface do menu pop-up da seguinte forma (desta vez dois botões de rádio não são selecionados, por isso não existe uma lista valor da caixa drop-down):

Selecione o botão de "despesas", a seguinte classificação de todos "despesas" nome da categoria:

Selecione o botão de "renda", a seguinte classificação de todos "renda" nome da categoria:

E uma vista interface do controlador terminar, seguido por carregar a vista de interface FXML, adicione o seguinte método de MainApp.java arquivo addAccountFrame.fxml carregamento:

    /**
     * 操作结果:添加账目界面
     */
    public Scene initAddFrame() {
        try {
            Parent page = FXMLLoader.load(getClass().getResource("view/addAccountFrame.fxml"));
​
            Stage mainFrameStage = new Stage();
            mainFrameStage.setTitle("添加账目");
            mainFrameStage.setResizable(true);
            mainFrameStage.setAlwaysOnTop(false);
            mainFrameStage.initModality(Modality.APPLICATION_MODAL);
            mainFrameStage.initOwner(primaryStage);
            Scene scene = new Scene(page);
            mainFrameStage.setScene(scene);
​
            mainFrameStage.show();
            return scene;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Em seguida, adicione um item de menu é invocada na MainPageController.java evento:

    /**
     * ”添加“菜单项的事件监听器
     *
     * @param actionEvent 事件
     */
    @FXML
    public void addMenuItemEvent(ActionEvent actionEvent) {
        // 刷新界面数据
        initialize();
        // 调用添加账目界面
        mainApp.initAddFrame();
    }

Execute o projeto você pode ver a interface agregado, mas não há nenhum manipulador de eventos, única interface.

 

Adicionar recursos

AddAccountFrameController funcionalidade add implementado no método addButtonEvent (), como segue:

        // 类型
        String type = selectedRadioButton;
        // 金额,把从文本框得到的string类型数据转换为float类型
        float money = Float.parseFloat(moneyTextField.getText());
        // 分类
        String classification = selectedCoboboxItem;
        // 备注
        String memo = memoTextArea.getText();
        // 日期
        String date = datePickerTextField.getValue().toString();
        // 将用户输入的数据封装到Record实体类中
        Record record = new Record(Session.getUser().getUserId(), type, money, classification, memo, date);
        // 实例化RecordDao对象
        RecordDao recordDao = new RecordDao();
        // 添加数据到数据库
        boolean b = recordDao.addRecord(record);
        // 对添加操作的结果进行判断处理
        if (b) {
            SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "添加账目成功!");
            // 清空用户选择
            outputRadioButton.setSelected(false);
            inputRadioButton.setSelected(false);
            moneyTextField.setText("");
            classificationComboBox.getItems().clear();
            memoTextArea.setText("");
            datePickerTextField.getEditor().setText("");
        } else {
            SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "添加账目失败!");
        }

Código Descrição: aquisição de informações inseridas pelo usuário, e depois encapsulado Gravar objeto de classe entidade, chamada addRecord RecordDao () na operação de adição, e depois adicionar os resultados do processo de determinação.

Event Processing "gastar" botões de rádio são as seguintes:

    /**
     * “支出”单选按钮的事件监听器
     *
     * @param actionEvent 事件
     */
    public void outputRadioButtonEvent(ActionEvent actionEvent) {
        // 获取支出分类的所有信息
        List<Classification> classificationList = new ClassificationDao().selectByType("支出");
        // 实例化一个一维数组
        String[] classificationNames = new String[classificationList.size()];
        // 将查询得到的分类名称装到一维数组中
        for (int i = 0; i < classificationList.size(); i++) {
            classificationNames[i] = classificationList.get(i).getcName();
        }
        // 给下拉列表框添加选项
        publicTools.public_addComboBoxItems(classificationComboBox, classificationNames);
        // 获取单选按钮项
        selectedRadioButton = outputRadioButton.getText();
        // 设置descriptionLabel文本内容
        descriptionLabel.setText("添加" + outputRadioButton.getText());
    }

Definições: método de classe por selectByType ClassificationDao para obter todas nome categoria de despesas, e converte () no qual uma matriz unidimensional, e depois chamar public_addComboBoxItems () da classe PublicTools preencher dados, e fornece o botão de rádio selecionado atribuir um valor a uma variável e, em seguida, usar o "adicionar" manipulação de eventos.

Event Processing "renda" botão de rádio é a seguinte:

    /**
     * “收入”单选按钮的事件监听器
     *
     * @param actionEvent 事件
     */
    public void inputRadioButtonEvent(ActionEvent actionEvent) {
        // 获取收入分类的所有信息
        List<Classification> classificationList = new ClassificationDao().selectByType("收入");
        // 实例化一个一维数组
        String[] classificationNames = new String[classificationList.size()];
        // 将查询得到的分类名称装到一维数组中
        for (int i = 0; i < classificationList.size(); i++) {
            classificationNames[i] = classificationList.get(i).getcName();
        }
        // 给下拉列表框添加选项
        publicTools.public_addComboBoxItems(classificationComboBox, classificationNames);
        // 获取单选按钮项
        selectedRadioButton = inputRadioButton.getText();
        //设置descriptionLabel文本内容
        descriptionLabel.setText("添加" + inputRadioButton.getText());
    }

"Categoria" manipulador de eventos caixa de lista drop-down da seguinte forma:

    /**
     * ”分类“下拉列表框的事件监听器
     *
     * @param actionEvent 事件
     */
    public void classificationComboBoxEvent(ActionEvent actionEvent) {
        //只处理选中的状态
        selectedCoboboxItem = (String) classificationComboBox.getSelectionModel().selectedItemProperty().getValue();
    }

Todos conclusão de código lógica, agora está a executar o projecto, função de teste:

Você pode, então, visualizar o registro adicional de sucesso na interface principal:

 

 

número de micro-canal público pesquisável [ Java exemplo de programa ] ou digitalizar o número de código Fanger Wei para obter mais atenção do público.

Nota: Responder para [o fundo número público 20200324 ] pode obter o código fonte deste capítulo.

 

Publicado 500 artigos originais · Louvor obteve 77 · vista 160 000 +

Acho que você gosta

Origin blog.csdn.net/cnds123321/article/details/104278434
Recomendado
Clasificación