2015-05-26 128 views
0

我也跟着從這個問題的說明我的應用程序的TableView中設置ComboBoxCell。 (How to put ComboBoxTableCell in a TableView?集ComboBoxCell在TableView中的JavaFX

細胞的申報工作正常,但下拉框中不會出現在表中。我覺得是這樣的,因爲只有col1和COL2是在我的模型。 COL3不是寫在數據庫連接後,我的表項

我不知道如何takte TableView中組合框,需要你的幫助。

這裏是我的代碼:

控制器:

package controller; 

imports 

public class main_controller implements Initializable { 
    private ObservableList<model> tableData = FXCollections.observableArrayList(); 
    private ObservableList<String> cbValues = FXCollections.observableArrayList("1", "2", "3"); 

    @FXML 
    private TableView<model> ComboTable; 
    @FXML 
    private TableColumn<model, String> col1; 
    @FXML 
    private TableColumn<model, String> col2; 
    @FXML 
    private TableColumn<model, String> col3; 

    public main_controller() { 

    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     tableData.clear(); 
     col1.setCellValueFactory(new PropertyValueFactory<model, String>("rCol1")); 
     col2.setCellValueFactory(new PropertyValueFactory<model, String>("rCol2")); 
     col3.setCellFactory(ComboBoxTableCell.forTableColumn(new DefaultStringConverter(), cbValues)); 

     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      System.out.println("*** Loaded Oracle-Driver ***"); 
     } catch (ClassNotFoundException e1) { 
      System.out.println("Driver-Loading failed."); 
      e1.printStackTrace(); 
     } 
     try { 
      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:lukas/[email protected]:1521:OTTO"); 
      Statement statement = conn.createStatement(); 
      ResultSet resultset = statement.executeQuery("SELECT NUMMER, DATEN1, DATEN2 FROM LUKAS order by NUMMER"); 
      String Daten1 = "empty"; 
      String Daten2 = "empty"; 
      // Zum einfügen kann man später auf diese Variable zurückgreifen. 
      int columnIndex; 
      System.out.println("*** Connected with Database ***"); 
      while (resultset.next()) { 
       columnIndex = resultset.getInt("NUMMER"); 
       System.out.println("Tabellenindex der Zeile:\t" + columnIndex); 
       Daten1 = resultset.getString("DATEN1"); 
       Daten2 = resultset.getString("DATEN2"); 
       System.out.println("Daten1:\t " + Daten1 + "\t\t\tDaten2: " + Daten2); 
       **model entry = new model(Daten1, Daten2); 
       tableData.add(entry);** 
       } 
      System.out.println("*** Database data saved to Observable List named 'data' ***"); 
      ComboTable.setItems(tableData); 
      System.out.println("*** Table Items setted ***"); 
      statement.close(); 
     } catch (SQLException e) { 
       System.out.println("Login fehlgeschlagen."); 
       e.printStackTrace(); 
     } 
    } 

} 

型號:

package model; 

import javafx.beans.property.SimpleStringProperty; 

public class model { 

    private final SimpleStringProperty rCol1; 
    private final SimpleStringProperty rCol2; 

    public model(String sCol1, String sCol2) { 
     this.rCol1 = new SimpleStringProperty(sCol1); 
     this.rCol2 = new SimpleStringProperty(sCol2); 
    } 

    public String getRCol1() { 
     return rCol1.get(); 
    } 

    public void setRCol1(String set) { 
     rCol1.set(set); 
    } 
    public String getRCol2() { 
     return rCol2.get(); 
    } 

    public void setRCol2(String set) { 
     rCol2.set(set); 
    } 
} 

該應用程序看起來像現在這樣的權利: Picture

希望你能幫助我!

+0

當您雙擊單元格中的ComboBoxCell會出現,即進入編輯模式。但首先你需要看到整個圖片,你想從combobox分配選定的值。細胞最初會呈現什麼等等。 –

+0

謝謝!發佈它作爲答案,我回答這個問題。 :) – lukas22497

+0

等..所以你的問題解決了? –

回答

0

單元的聲明工作正常,但組合框不出現 出現在表中。

當該單元格處於編輯模式時,將出現ComboBoxTableCell的組合框。爲此,您需要將tableview設置爲可編輯,然後雙擊上面提到的單元格。

從ComboBoxTableCell javadoc的名言:

默認情況下,ComboBoxTableCell呈現爲一個標籤時被編輯不 ,作爲一個組合框時編輯模式。默認情況下,組合框 將伸展以填充整個表格單元格。