2016-11-21 80 views
0

選択した行にTableView行の色をコードする機会はありますか?私はそれのようなものを意味しています。例えば、TableViewはムービーで満たされていて、店頭にいるときは緑色に、特定のムービー(行)は店頭にいるときに赤色に変えたいと思っています。店舗にいるかどうかは、データベースへのクエリを使って簡単な関数を作成することでわかりますが、選択した行の背景色を変更できる関数も必要です。そのようなコードを作る方法はありますか?クリック時の行背景色JavaFX

あなたはの線に沿って何かを行うことができます
+0

https://docs.oracle.com/javase/8/javafx /api/javafx/scene/control/TableCell.html – Mordechai

答えて

1

TableView<Movie> table = ... ; 

PseudoClass outOfStockPseudoClass = PseudoClass.getPseudoClass("out-of-stock"); 

table.setRowFactory(tv -> { 
    TableRow<Movie> row = new TableRow<>(); 
    row.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> { 
     if (isNowSelected) { 
      boolean outOfStock = checkIfOutOfStock(row.getItem()) ; 
      row.pseudoClassStateChanged(outOfStockPseudoClass, outOfStock); 
     } 
    }); 
    row.itemProperty().addListener((obs, oldMovie, newMovie) -> { 
     if (row.isSelected()) { 
      boolean outOfStock = checkIfOutOfStock(newMovie) ; 
      row.pseudoClassStateChanged(outOfStockPseudoClass, outOfStock); 
     } 
    }); 
    return row ; 
}); 

をそして、あなたは映画は、あなたが初期化時に在庫があるかどうかを確認することができます場合は、お使いの外部CSSファイルで

.table-row-cell { 
    -fx-selection-bar: /* color for in-stock selected row */ ; 
} 
.table-row-cell:out-of-stock { 
    -fx-selection-bar: /* color for out-of-stock selected row */; 
} 

を行いますデータベースからのデータを使用すると、行のファクトリを簡素化できます。

table.setRowFactory(tv -> new TableRow<Movie>() { 
    @Override 
    protected void updateItem(Movie item, boolean empty) { 
     super.updateItem(item, empty); 
     pseudoClassStateChanged(outOfStockPseudoClass, 
      item!=null && item.isOutOfStock()); 
    } 
}); 
+0

これはうまくいくかもしれませんが、色は変わっていません:/外部CSSファイルは標準のapplication.cssですか?私は仕事や何かにアプリケーションにリンクする必要がありますか?私は、どういうわけか、pseudoClassを使わずに、ここのようにすることができますか?http://stackoverflow.com/questions/30889732/javafx-tableview-change-row-color-based-on-column-valueそしてyes、tableviewの初期化または私はその映画が在庫にあるかどうか質問照会をしませんリフレッシュ? –