2015-06-25 4 views
0

У меня есть listBox, который заполнен некоторыми данными из моей базы данных mysql. Я хочу добавить выбранный элемент в tableView из списка. Проблема в том, что когда я нажимаю кнопку «Добавить», выбранный элемент добавляется в 1-я ячейка. Но когда я выбираю другой элемент, а затем добавляю его, он переписывается в 1-й ячейке. Вот мой код.TableView вставить данные из поля списка javafx

Button Select= new Button("Select"); 
private TableView table = new TableView<>(); 
public void start(Stage primaryStage) throws Exception{ 
TableColumn<Map, String> NameCol = new TableColumn<>("NameCol"); 
TableColumn<Map, String> QuantityCol = new TableColumn<>("Quantity"); 
TableColumn<Map, String> PriceCol = new TableColumn<>("Price"); 
ObservableList <String> items = FXCollections.observableArrayList (
     "0" , "1" , "2" , "3" , "4" , 
       "5" , "6" , "7" , "8" , "9"); 

    table.getColumns().addAll(NameCol, QuantityCol, PriceCol); 

    QuantityCol.setCellFactory(ChoiceBoxTableCell.forTableColumn (items)); 
    table.setItems(generateDataInMap()); 
    table.setEditable(true); 
    table.getSelectionModel().setCellSelectionEnabled(true); 
    table.getColumns().setAll(NameCol, QuantityCol,PriceCol); 

Select.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
       try { 

        table.setItems(generateDataInMap()); 
        NameCol.setCellValueFactory(new MapValueFactory(Column1MapKey)); 
     } catch (Exception ex) { 
      Logger.getLogger(mainMenu.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    }); 

private ObservableList<Map> generateDataInMap() { 

    int count = 1; 
    ObservableList<Map> allData = FXCollections.observableArrayList(); 

     Map<String, String> dataRow = new HashMap<>(); 
     String value1 = nameView.getSelectionModel().getSelectedItem(); 

     dataRow.put(Column1MapKey, value1); 

     allData.add(dataRow); 
     System.out.println(dataRow); 
    return allData; 
} 

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

} 

Я не написал весь код, просто блок кода. Может кто-то, пожалуйста, помогите мне. Я буду очень признателен :) :)

+0

Да, я это пробовал .. используя это тоже заменяет данные в 1-й ячейке. Мне нужно добавить во 2-ю ячейку i.e ячейку ниже нее. Я очень новичок в javafx. Было бы очень приятно, если бы вы могли показать мне пример –

ответ

0

После поиска 4 дней, я сделал этот код ... он работает. :) Если кому-то это нужно, то его написано ниже.

public class mainMenu extends Application { 
private TableView<foodTable> table = new TableView<foodTable>(); 
private final ObservableList<foodTable> data = FXCollections.observableArrayList(); 

Select.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
       try { 
       String FoodName = new String(nameView.getSelectionModel().getSelectedItem());    
       data.add(new foodTable(String.valueOf(rowid),FoodName,qtycb.getValue().toString(),String.valueOf(PriceAmtVal))); 
       rowid++; 
       System.out.println(data); 
     } catch (Exception ex) { 
      Logger.getLogger(mainMenu.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    }); 
//Buttion code : 

Select.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
       try { 
       String FoodName = new String(nameView.getSelectionModel().getSelectedItem());    
       data.add(new foodTable(String.valueOf(rowid),FoodName,qtycb.getValue().toString(),String.valueOf(PriceAmtVal))); 
       rowid++; 
       System.out.println(data); 
     } catch (Exception ex) { 
      Logger.getLogger(mainMenu.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    }); 
public static class foodTable { 

    private final SimpleStringProperty FoodName; 
    private final SimpleStringProperty Quantity; 
    private final SimpleStringProperty Price; 

    private foodTable(String fName, String lName, String email,String Price) { 

     this.FoodName = new SimpleStringProperty(lName); 
     this.Quantity = new SimpleStringProperty(email); 
     this.Price = new SimpleStringProperty(Price); 
    } 


    public String getFoodName() { 
     return FoodName.get(); 
    } 
    public void setFoodName(String fName) { 
     FoodName.set(fName); 
    } 

    public String getQuantity() { 
     return Quantity.get(); 
    } 
    public void setQuantity(String fName) { 
     Quantity.set(fName); 
    } 
    public String getPrice() { 
     return Price.get(); 
    } 
    public void setPrice(String fName) { 
     Price.set(fName); 
    } 
} 
0

В обработчике события вы звоните

table.setItems(...); 

, который задает элементы, показанные в таблице (т.е. заменяет все те, которые есть с теми, которые Вы определяете) ,

Использование

table.getItems().addAll(...); 

вместо этого.

+0

Я заменил 'table.setItems (generateDataInMap());' с 'table.getItems(). AddAll (generateDataInMap());' По-прежнему написано на 1st cell :( –

+0

Можете ли вы, пожалуйста, помочь мне :( –

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