【问题标题】:javafx adding buttons to infinite with functionjavafx将按钮添加到无限功能
【发布时间】:2014-08-29 10:10:18
【问题描述】:

我正在创建一个项目,用户可以在其中创建尽可能多的程序,我必须在每个程序中显示为按钮,就像这里我用6 program展示一个示例

这项工作在php 中很容易,但在javafx 我不知道如何通过从数据库中获取数据来添加这么多。

现在每个按钮都必须包含一些功能

我可以手动完成,所以有限制,我不能将它扩展到无限,所以我需要你的帮助来完成这项工作。

【问题讨论】:

  • 您至少应该指定您如何知道所有可用的程序以及您为实现这一目标所做的努力。提示:您可能需要一个 GridPane 和一个要执行的程序/类的列表。

标签: java javafx javafx-2 javafx-8


【解决方案1】:

完成它的步骤是:

  1. 创建一个基础层“窗格”(就像提到的 Kyllopardiun,可能需要从外观上看一个网格)
  2. 在代码中,计算出您需要从数据库中获得多少按钮,可能使用 JDBC。
  3. 使用 Pane.getChildren().add() 功能,在循环中动态地将按钮添加到窗格中。

以下是此类功能的示例:

public Class example{

    private Connection createInitialCon() {
        try {
            return DriverManager.getConnection(
                    "jdbc:mysql://yourdatabaseaddress:youdatabaseport/databasename",
                    "database_usernamer",
                    "database_password");
        } catch (SQLException e) {
            rootLog.debug("Error connecting to our database!", e);
        }
        return null;
    }

    public void main(String[] args){
        GridPane main_pane = new GridPane();
        int numberOfButtons = 0;
        Connection con = createInitialCon();
        String line = "";
        try{
            PreparedStatement pstmt; 
            line = "SELECT num_buttons FROM `dbName`.`tableName` WHERE id = \"idOfRow\";"

            pstmt = con.prepareStatement(line);
            pstmt.execute();
            ResultSet rs = pstmt.getResultSet();
            if (rs != null) {
                if (rs.next()) {
                    ResultSetMetaData rsmd = rs.getMetaData();
                    for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {
                        switch (rsmd.getColumnType(i)) {
                            case Types.INTEGER: {
                                numberOfButtons = rs.getInt("num_buttons");
                                break;
                            }

                        }
                    }
                }
            }
            Button temp;
            for (int i = 0; i < num_buttons; i++){
                temp = new Button("Button " + i);
                temp.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent e) {
                        //Do some stuff with the button for this listener. 
                    }
                });
                pane.getChildren().add(temp);
            }

        }catch(IOException e){
            e.printStackTrace(System.out);
        }

    }


}

显然这只是一个例子,我还没有测试过,它可能会在这里和那里有一些语法错误,但这是一般的想法。您还需要将窗格添加到场景中,然后将场景设置为舞台以实际显示某些内容。

祝你好运!

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多