2016-04-07 1 views
0

У меня проблема с изменением цвета фона ячеек таблицы в JavaFX8.Как изменить цвет фона не выбранной ячейки в представлении таблицы JavaFx 8

первым по умолчанию CSS enter image description here

применения нового стиля с

SetStyle ("- FX-выравнивания: правоцентристской; -fx-цвет фона: # FFD9D9;")

enter image description here

Мой вопрос здесь, где была горизонтальная граница?

Это становится еще хуже, когда вы выбираете эту линию. enter image description here

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

Пример класса (работает корректно)

public class TableCellColorTest extends Application { 

    private static final String[] COLUMN_HEADERS = new String[] { "2014", "2015", "2016", "2017", "2018" }; 
    private static final String[] COLUMN_STYLES = new String[] { "table-row-cell-2014", "table-row-cell-2015", "table-row-cell-2016", "table-row-cell-2017", "table-row-cell-2018" }; 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     Scene scene = new Scene(createContent(), 1000, 600); 

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

    private Parent createContent() { 

     ObservableList<String[]> data = FXCollections.observableArrayList(); 
     data.add(new String[] { "321.500,00 €", "262.500,00 €", "66.000,00 €", "0,00 €", "0,00 €" }); 
     data.add(new String[] { "", "", "", "", "", "", "" }); 
     data.add(new String[] { "321.500,00 €", "262.500,00 €", "66.000,00 €", "0,00 €", "0,00 €" }); 
     data.add(new String[] { "50.000,00 €", "100.000,00 €", "50.000,00 €", "0,00 €", "0,00 €" }); 

     TableView<String[]> table = new TableView<>(data); 
     table.setPrefWidth(990); 
     table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

     table.getStylesheets().add("styles.css"); 

     for (int i = 0; i < 5; i++) { 
      TableColumn<String[], String> col = new TableColumn<>(COLUMN_HEADERS[i]); 
      final int _i = i; 
      col.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper(cellData.getValue()[_i])); 

      // set color 
      col.setCellFactory(cellData -> { 
       return new TableCell<String[], String>() { 
        @Override 
        public void updateItem(String item, boolean empty) { 
         super.updateItem(item, empty); 
         setText(item); 
         if (!empty) { 
          getStyleClass().add(COLUMN_STYLES[_i]); 
         } 

        } 
       }; 
      }); 

      table.getColumns().add(col); 
     } 

     FlowPane flowPane = new FlowPane(table); 

     return flowPane; 
    } 
} 

работает стилевых

.table-row-cell-2014 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: #FFD9D9; 
    -fx-background-insets: 0 0 1 0; 
} 

.table-row-cell:selected .table-row-cell-2014, .table-row-cell:selected .table-row-cell-2015, 
    .table-row-cell:selected .table-row-cell-2016, .table-row-cell:selected .table-row-cell-2017, 
    .table-row-cell:selected .table-row-cell-2018 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: null; 
    -fx-background-insets: 0 0 1 0; 
} 

.table-row-cell-2015 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: #FFF5D9; 
    -fx-background-insets: 0 0 1 0; 
} 

.table-row-cell-2016 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: #ECFFD9; 
    -fx-background-insets: 0 0 1 0; 
} 

.table-row-cell-2017 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: #D9FFE2; 
    -fx-background-insets: 0 0 1 0; 
} 

.table-row-cell-2018 { 
    -fx-alignment: CENTER-RIGHT; 
    -fx-background-color: #D9FFFF; 
    -fx-background-insets: 0 0 1 0; 
} 

изображение Результат enter image description here

ответ

1

Вы можете исправить цвет текста с

-fx-background-color: -fx-background; -fx-background: #FFD9D9; 

вместо настройки цвета фона, которую вы используете в настоящее время.

(Почему цвет текста по умолчанию является лестница - то есть функция цвета -., Что зависит от величины смотрел вверх цвет fx-background Так что, если вы измените значение -fx-background вы автоматически изменять цвет текста в то, что контрастирует с -fx-background. Тогда вы просто должны сказать ячейку использовать посмотрел вверх цвет -fx-background в качестве цвета фона.)

граница идет от строки таблицы, и ваш фон скрывает это. Вы можете исправить это с

-fx-background-insets: 0 0 1 0 ; 

Таким образом, в общей сложности:

setStyle("-fx-alignment: CENTER-RIGHT; -fx-background-insets: 0 0 1 0 ;" 
    +" -fx-background-color: -fx-background; -fx-background: #FFD9D9;") 
+0

Так что в принципе означает, что ячейка по умолчанию является прозрачным, а граница и выбор цвета основан на что-то позади ячейки как строки или таблицы. –

+0

Спасибо, что ты указал мне в правильном направлении, и ваш ответ в http://stackoverflow.com/questions/29857596/javafx-tableview-change-selected-cell-colour?rq=1 помог также –

+0

Исправить. Ячейка по умолчанию прозрачна, но определяет границу на правом краю. –

0

Вы можете просто добавить эти две строки в файле styles.css, чтобы исправить это.

.table-row-cell:selected .text { 
     -fx-fill: blue ; 
} 

.table-row-cell{ 
    -fx-border-color:#d3d3d3; 
} 

Я надеюсь, что это поможет ..

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