2014-12-03 7 views
3

TransactionWrapper라는 클래스가 있습니다. 내 응용 프로그램에서 TableView에 대한 ObservableList를 채우는 데 사용하고 있습니다. 이 랩퍼에는 인출인지 보증인인지를 나타내는 속성 (enum)이 있습니다. 금액 셀을 렌더링/포맷 (거래의 성격에 따라 빨강 또는 초록색으로 표시)하려면 해당 항목으로 이동해야하며 해당 전투에서 저를 돕는 것을 찾지 못합니다.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); 
        } 
       } 
      } 
     }; 
    } 
}); 

그리고 여기에 내가 내 열을 설정 해요 방법은 다음 FOL와 TransactionWrapper라는 개체의 오프 실행

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

이에

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

덕분에, 존

+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

좋은 하나! 셀을 선택했을 때 스타일을 지정하는 방법을 알고 있습니까? 텍스트 채우기 색상이 좋지 않습니다. –

관련 문제