2015-10-01 4 views
2

Я пробовал этот код, чтобы получить значения, выбранные в поле со списком, и этот код работает.Как получить значения, выбранные в ComboBoxTableCell в представлении таблицы

String cate = category.getValue().toString(); 

Но как получить значение выбранного в ComboBoxTableCell внутри TableView?

Использование ниже коды я получаю вид ComboBox внутри таблиц

columnmain2.setCellFactory(ComboBoxTableCell.forTableColumn(names.toString())); 

и как получить значение, выбранный в виде таблицы в поле со списком ячейки таблицы?

+1

Если все настроено обычным способом, когда элемент выбран в поле со списком, он будет обновлять соответствующее свойство элемента для строка таблицы. Поэтому вы можете просто посмотреть список элементов таблицы, чтобы узнать, какие значения выбраны. –

ответ

3

Вы можете получить выбранное значение combobox, когда пользователь выходит из режима редактирования для этой ячейки таблицы combobox. А именно при совершении нового значения. Вам нужно использовать метод tablecolumn.setOnEditCommit(). Вот полный работоспособным пример кода (MCVE для ComboBoxTableCell Demo):

public class ComboBoxTableCellDemo extends Application 
{ 
    private TableView<Person> table = new TableView<>(); 
    private final ObservableList<Person> data 
      = FXCollections.observableArrayList(
        new Person("Bishkek"), 
        new Person("Osh"), 
        new Person("New York"), 
        new Person("Madrid") 
      ); 

    @Override 
    public void start(Stage stage) 
    { 
     TableColumn<Person, String> cityCol = new TableColumn<>("City"); 
     cityCol.setMinWidth(200); 
     cityCol.setCellValueFactory(new PropertyValueFactory<>("city")); 
     cityCol.setCellFactory(ComboBoxTableCell.<Person, String>forTableColumn("Bishkek", "Osh", "New York", "Madrid")); 
     cityCol.setOnEditCommit((TableColumn.CellEditEvent<Person, String> e) -> 
     { 
      // new value coming from combobox 
      String newValue = e.getNewValue(); 

      // index of editing person in the tableview 
      int index = e.getTablePosition().getRow(); 

      // person currently being edited 
      Person person = (Person) e.getTableView().getItems().get(index); 

      // Now you have all necessary info, decide where to set new value 
      // to the person or not. 
      if (ok_to_go) 
      { 
       person.setCity(newValue); 
      } 
     }); 

     table.setItems(data); 
     table.getColumns().addAll(cityCol); 
     table.setEditable(true); 

     stage.setScene(new Scene(new VBox(table))); 
     stage.show(); 
    } 


    public static class Person 
    { 
     private String city; 

     private Person(String city) 
     { 
      this.city = city; 
     } 


     public String getCity() 
     { 
      return city; 
     } 


     public void setCity(String city) 
     { 
      System.out.println("city set to new value = " + city); 
      this.city = city; 
     } 
    } 


    public static void main(String[] args) 
    { 
     launch(args); 
    } 

} 
+1

thanxx много @UlukBiy !!!! он работает, и я тоже получил значение, когда String newValue = e.getNewValue(); , – Seban

Смежные вопросы