2015-07-20 5 views
-2

Я получаю Ошибка синтаксиса на токене «>>», выражение после этого токена при вызове setCellFactory ниже, но не понимаю почему.Ошибка синтаксиса на токене «>>», выражение после этого токена

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.control.cell.TextFieldTableCell; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class TableVieww extends Application { 

    private static TableView<TableData> table; 

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

    @SuppressWarnings("unchecked") 
    public void start(Stage primaryStage) throws Exception { 
     Stage s = primaryStage; 
     s.setTitle("The Title"); 

     TableColumn<TableData, String> column1 = new TableColumn<>("String"); 
     column1.setMinWidth(150); 
     column1.setCellValueFactory(new PropertyValueFactory<TableData, String>("s")); 
     column1.setEditable(true); 
     column1.setCellFactory(TextFieldTableCell.forTableColumn()); 
     column1.setOnEditCommit(e -> { 

     }); 


     TableColumn<TableData, Double> column2 = new TableColumn<>("Double"); 
     column2.setMinWidth(50); 
     column2.setCellValueFactory(new PropertyValueFactory<TableData, Double>("d")); 
     column2.setEditable(true); 
     // Error within this line (The line below) 
     column2.setCellFactory(TextFieldTableCell.forTableColumn()); 
     column2.setOnEditCommit(e -> { 

     }); 


     // set up a table 
     table = new TableView<>(); 
     table.setItems(getData()); 
     table.getColumns().addAll(column1, column2); 
     table.setEditable(true); 

     // setting up a layout 
     VBox layout = new VBox(10); 
     layout.getChildren().add(table); 

     // Setting up a scene 
     Scene scene = new Scene(layout, 500, 200); 
     s.setScene(scene); 
     s.show(); 
    } 



    private static ObservableList<TableData> getData(){ 
     ObservableList<TableData> list = FXCollections.observableArrayList(); 
     TableVieww view = new TableVieww(); 
     list.add(view.new TableData("BlaBlaBla", 10)); 
     list.add(view.new TableData("TraTraTra", 5.1)); 
     return list; 
    } 

    public class TableData{ 

     double d; 
     String s; 

     public TableData(String s, double d) { 
      this.d = d; 
      this.s = s; 
     } 

     public double getD() { 
      return d; 
     } 

     public void setD(double d) { 
      this.d = d; 
     } 

     public String getS() { 
      return s; 
     } 

     public void setS(String s) { 
      this.s = s; 
     } 


    } 



} 

Что не так? Заранее спасибо за помощь!

+0

очистки для ясности и читаемости – J0e3gan

+0

Ваш код не является исполняемым, вы используете классы, которые не имеют, попробовать и посмотреть, если вы можете сузить проблему вплоть до небольшой класс, который я могу запустить. –

ответ

1

Это не совсем безупречно, но оно работает. Вы, вероятно, должны будете настроить его слишком сильно, чтобы ваши потребности, но ... он работает.

public class SpinnerTableCell<S, T> extends TableCell<S, T> { 
    private Spinner spinner; 
    private String text; 

    public SpinnerTableCell(int min, int max) { 
     this.spinner = new Spinner(min, max, 0.0); 
     spinner.focusedProperty().addListener((observable, oldBoolean, newBoolean)->{ 
      if(!newBoolean){ 
       setText(spinner.getValue().toString()); 
       text = getText(); 
       setGraphic(null); 
      } 
     }); 
    } 

    public void startEdit() { 
     if (this.isEditable() && this.getTableView().isEditable() && this.getTableColumn().isEditable()) { 
      super.startEdit(); 
      if (this.isEditing()) { 
       setText(""); 
       setGraphic(spinner); 
      } 

     } 
    } 

    public void cancelEdit() { 
     super.cancelEdit(); 
     setText(text); 
     setGraphic(null); 
    } 

    public void updateItem(T item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? "" : item.toString()); 
     spinner.getValueFactory().setValue(empty ? 0.0 : item); 
    } 
} 

Вы можете установить завод с tableCell.setCellFactory((e)->new SpinnerTableCell(min, max));

+0

Не исправлена ​​ошибка, на самом деле появилась новая ошибка: Ошибка синтаксиса на токене ",", удалить этот токен – Misteris

+0

@Misteris Я обновил свой ответ. –

+0

@Misteris Я снова прищурился, обновился снова. –