javafx通过函数添加按钮到无限

时间:2014-07-08 15:27:13

标签: java javafx javafx-2 javafx-8

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

的示例

enter image description here

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

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

我可以手动完成,所以有限制我无法将其扩展到无限,所以我需要你的帮助如何做这项工作。

1 个答案:

答案 0 :(得分:0)

完成它的步骤是:

  1. 创建一个基础层'窗格'(就像Kyllopardiun提到的那样,可能想要从它的外观看网格)。
  2. 在代码中,计算出数据库需要多少按钮,可能使用JDBC。
  3. 使用Pane.getChildren()。add()功能,在循环中,动态地向窗格添加按钮。
  4. 以下是此类功能的示例:

    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);
            }
    
        }
    
    
    }
    

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

    祝你好运!