2016-12-15 5 views
0

У меня есть 31 столбец (день 1 день 31) и 12 (месячных) строк на моем столе. Я хочу найти полную таблицу (row wise search) для данных (день) и установить цвет фона только для соответствующей ячейки. Я видел, что можно установить цвет фона для ячейки в определенном столбце используя cellfactory функция.JavaFX Итерация через ячейки TableView (строка мудрый) и установка цвета фона

birthdayColumn.setCellFactory(column -> { 
     return new TableCell<Person, LocalDate>() { 
      @Override 
      protected void updateItem(LocalDate item, boolean empty) { 
       super.updateItem(item, empty); 
        if (item == null || empty) { 
      setText(null); 
      setStyle(""); 
     } 

      // Style all dates in March with a different color. 
      if (item. == Month.MARCH) { 
       setTextFill(Color.CHOCOLATE); 
       setStyle("-fx-background-color: yellow"); 
      } else { 
       setTextFill(Color.BLACK); 
       setStyle(""); 
      } 
     }; 
    }); 

Здесь проверка только один столбец с именем «birthdayColumn'.But в моем случае он должен проверить все ячейки таблицы (построчно) в одном методе и нужно установить фоновый цвет только для этого соответствия cell.How я могу сделать that.Thank Вы заранее

+0

'TableView' действительно не кажется, хорошо подходит для отображения календаря, как это. Вероятно, было бы лучше просто использовать «GridPane» и самостоятельно управлять ячейками. Я действительно не понимаю, как здесь создаются вещи: в каком столбце находится 'birthdayColumn'? Я бы предположил, что есть 31 столбец таблицы, которые были по существу одинаковыми. И почему модель данных для строк под названием 'Person' ??? Разумеется, «Месяц» будет лучшим именем (возможно, вы можете использовать 'java.time.Month', в зависимости от того, как вы управляете данными). Если вы действительно хотите использовать «TableView», вам нужно показать больше, как вы это настроили. –

ответ

0

Это должно работать:

LocalDate myBirthday = null; //initialize with the date you need to highlight 

    birthdayColumn.setCellFactory(column -> { 
     return new TableCell<Person, LocalDate>() { 
      @Override 
      protected void updateItem(LocalDate item, boolean empty) { 
       super.updateItem(item, empty); 
       if (item == null || empty) { 
        setText(null); 
        setGraphic(null); 
       } 
       else { 
        setText(item.toString()); 
        setGraphic(null); 

        if (item.equals(myBirthday)) { 
         setTextFill(Color.CHOCOLATE); 
         setStyle("-fx-background-color: yellow"); 
        } 
        else { 
         setTextFill(Color.BLACK); 
         setStyle(""); 
        } 
       } 
      }}; 
    }); 
+0

Спасибо за ваши усилия, но я хочу, чтобы поиск по строке был бесполезным. Не нужно искать один столбец. Если он ищет только один столбец –

+0

, вы должны установить одну и ту же cellfactory для всех столбцов, так как наборы ячеек присвоены за столбец, а не за строку – user7291698

+0

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