2014-12-03 2 views
3

У меня есть класс с именем TransactionWrapper, который я использую для заполнения моего ObservableList для TableView в моем приложении. У этой обертки есть атрибут (перечисление), указывающий, является ли это отходом или депозитом. Мне нужно сделать это, чтобы отобразить/отформатировать ячейку количества (отобразить ее красным или зеленым цветом в зависимости от характера транзакции), и я не нахожу ничего там, что помогает мне в этой битве.JavaFX TableView: отформатируйте одну ячейку на основе значения другого в строке

В основном, что я хочу сделать, это посмотреть на строку и сказать, является ли тип снятием, покрасить текст красным, и если это цвет депозита зеленый ... Я надеюсь, что кто-то здесь может помочь мне с этим , Я опубликую ниже свою попытку с помощью setCellFactory, как я нашел в других местах. Этот подход позволяет мне форматировать ячейку и ее отображение, но проблема внутри функции updateItem, я могу получить значение моего типа транзакции.

amountCol.setCellFactory(new Callback<TableColumn<TransactionWrapper, String>, TableCell<TransactionWrapper, String>>() 
{ 
    @Override 
    public TableCell<TransactionWrapper, String> call(
      TableColumn<TransactionWrapper, String> param) 
    { 
     return new TableCell<TransactionWrapper, String>() 
     { 
      @Override 
      protected void updateItem(String item, boolean empty) 
      { 
       if (!empty) 
       { 
        // should be something like (transaction.getType().equals(TransactionTypes.DEPOSIT) ? true : false;) 
        boolean isDeposit = true; 
        setText(item);       
        if(isDeposit) // should be if type is deposit 
        { 
         setTextFill(Color.GREEN); 
        } 
        else        
        { 
         setTextFill(Color.RED); 
        } 
       } 
      } 
     }; 
    } 
}); 

А вот как я устанавливаю мою колонку:

amountCol.setCellValueFactory(cellData -> cellData.getValue().getAmountString()); 

Это работает от объекта под названием TransactionWrapper с ВОЛП:

private final StringProperty transactionTypeString; 
private final StringProperty dateString; 
private final StringProperty amountString; 
private final StringProperty payeeString; 
private final StringProperty categoryString; 
private final StringProperty notesString; 
private Transaction transaction; 

Любые идеи по этому вопросу будет будем очень благодарны. : D

Спасибо, Jon

+1

Попробуйте getTableRow(). GetItem(). GetDeposit() '. –

ответ

7

Фигурные это! Спасибо за идею Джеймса, но я пошла по-другому. Вот код для тех, кто в будущем читает этот пост:.

amountCol.setCellFactory(new Callback<TableColumn<TransactionWrapper, String>, 
      TableCell<TransactionWrapper, String>>() 
      { 
       @Override 
       public TableCell<TransactionWrapper, String> call(
         TableColumn<TransactionWrapper, String> param) 
       { 
        return new TableCell<TransactionWrapper, String>() 
        { 
         @Override 
         protected void updateItem(String item, boolean empty) 
         { 
          if (!empty) 
          { 
           int currentIndex = indexProperty() 
             .getValue() < 0 ? 0 
             : indexProperty().getValue(); 
           TransactionTypes type = param 
             .getTableView().getItems() 
             .get(currentIndex).getTransaction() 
             .getTransactionType(); 
           if (type.equals(TransactionTypes.DEPOSIT)) 
           { 
            setTextFill(Color.GREEN); 
            setText("+ " + item); 
           } else 
           { 
            setTextFill(Color.RED); 
            setText("- " + item); 
           } 
          } 
         } 
        }; 
       } 
      }); 

param.getTableView() GetItems() получить (currentIndex) был ключ .. пришлось сверлить родителя немного, но она. выполнил свою работу. Самый большой вызов - найти индекс. Чувствовал себя немного глупо, когда выяснилось, что существует функция indexProperty(). Lol. Не думал, чтобы посмотреть на функции уровня класса, которые были доступны. Счастливое кодирование!

+0

Хороший! Вы знаете, как стилизовать ячейку при ее выборе, цвет textfill не выглядит таким приятным, когда выбранный –

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