2013-11-12 3 views
0

При запуске программы ниже TableCell не применяется (цифры выравниваются слева, а не выравниваются по правому краю). Нажатие на кнопку «Изменить значения» корректирует выравнивание.TableCell не применяется последовательно

Использование jdk1.8.0-ЭА-B114

Я пропускаю что-то очевидно, или это ошибка?

import java.util.Arrays; 
import javafx.application.Application; 
import javafx.beans.property.DoubleProperty; 
import javafx.beans.property.SimpleDoubleProperty; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TableCell; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 
import javafx.util.Callback; 

public class TestFX extends Application { 

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

    @Override 
    public void start(final Stage stage) throws Exception { 
     MyTable table = new MyTable(); 
     table.table.getItems().addAll(Arrays.asList(new Item(0), new Item(1), new Item(-1))); 

     Scene scene = new Scene(table); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    static class MyTable extends VBox { 

     private final Button button = new Button("Change Values"); 
     private final TableView<Item> table = new TableView<>(); 

     MyTable() { 
      super(); 
      TableColumn<Item, Double> value = new TableColumn<>("Value"); 
      value.setCellValueFactory(new PropertyValueFactory<>("value")); 
      value.setCellFactory((p) -> new NumberTableCell<>()); 

      table.getColumns().add(value); 

      button.setOnMouseClicked(this::changeValues); 
      getChildren().addAll(button, table); 
     } 

     public void changeValues(MouseEvent e) { 
      for (Item i : table.getItems()) { 
       i.value.set(i.value.get() + 1); 
      } 
     } 
    } 

    public static class Item { 
     private final DoubleProperty value; 
     public Item(double value) { this.value = new SimpleDoubleProperty(value); } 
     public DoubleProperty valueProperty() { return value; } 
    } 

    static class NumberTableCell<T> extends TableCell<T, Double> { 
     @Override 
     protected void updateItem(Double item, boolean empty) { 
      super.updateItem(item, empty); 
      if (empty || item == null) { 
       setText(null); 
       setTextFill(null); 
      } else { 
       setText(String.valueOf(item)); 
       setAlignment(Pos.CENTER_RIGHT); 
      } 
     } 
    } 
} 

ответ

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