2014-04-10 62 views
0

我試圖從MySQL數據庫的表中讀取一些值。該表只有一列和四行。我的代碼如下。我知道如何讀取所有的值。但是當您查看代碼時,您可以瞭解只能顯示數據庫中的一個值,即表格的最後一個值(最後一行的值)。哪個是從數據庫中讀取值並顯示的最佳方法?

我需要的是顯示錶中的所有值。我不是一個有經驗的程序員。那麼告訴我如何讀取和顯示錶格中的所有值。還有一個條件 - 我需要表中每個值的不同按鈕名稱,以便我可以將setOnAction()函數添加到每個按鈕。

如果有比使用按鈕更好的主意,請告訴我。但它不應該是複雜的。

private VBox userSelection() throws ClassNotFoundException, SQLException { 

    VBox vb1 = new VBox(); 
    vb1.setPadding(new Insets(40, 150, 20, 150)); 
    vb1.setSpacing(20); 

    Button b = null; 

    Text scenetitle2 = new Text("Choose Your Account"); 
    scenetitle2.setFont(Font.font("Tahoma", FontWeight.BOLD, 20)); 

    Class.forName("com.mysql.jdbc.Driver"); 
    connect = DriverManager 
       .getConnection("jdbc:mysql://localhost:3306/project?" 
         + "user=root&password=virus"); 
    statement = connect.createStatement(); 

    rs = statement.executeQuery("select * from user"); 

    while (rs.next()) { 

     String username = rs.getString("staffname"); 

     b = new Button(username); 
     b.setFont(Font.font("Calibri", FontWeight.BOLD, 17)); 
     b.setStyle(" -fx-base: #333333;"); 
     b.setTextFill(Color.WHITE); 
     b.setPrefSize(150,30); 

    } 

    vb1.getChildren().addAll(scenetitle2,b);   
    return vb1; 
} 

回答

1

我不能完全肯定,如果我按照問題是什麼,但...

我看到,while循環,你覆蓋你的鍵b對象,而將其添加到您的垂直框。所以只會添加最後一個Button對象。基本上你必須這樣做:

vb1.getChildren().add(scenetitle2); 
while (rs.next()) { 

    String username = rs.getString("staffname"); 

    b = new Button(username); 
    b.setFont(Font.font("Calibri", FontWeight.BOLD, 17)); 
    b.setStyle(" -fx-base: #333333;"); 
    b.setTextFill(Color.WHITE); 
    b.setPrefSize(150,30); 

    b.setOnAction(...) //add handler to button 

    vb1.getChildren().add(b); //add button object to your vbox inside the loop 
} 
+0

謝謝你。還有1個問題在那裏。所有按鈕都具有相同的名稱。那麼我怎樣才能使每個按鈕的setOnAction()函數都可以使用。 – TomJ

+0

同樣,在將按鈕添加到VBox之前,在While循環中添加setOnAction(),請參閱編輯代碼 – Perneel

+0

它會工作嗎?我的意思是,如果按鈕名稱相同,會引起一些問題或矛盾。 – TomJ

相關問題