2016-04-17 8 views
3

シーン内に選択したセルを強調表示するテーブルビューがあります。 JavaFX CSS referenceによると、細胞上の疑似クラス:selectedがあるので、私は次のCSS試してみました::セルに適用されていない疑似クラススタイル

.cell:selected { 
    -fx-effect: dropshadow(gaussian, 10, .2, 4, 4); 
} 

をしかし、スタイルがセルに適用されていません。 .cell:hoverを使用すると、期待どおりに動作します。

次は、単純化されたFXMLです:

<Pane fx:controller="Controller"> 
    <children> 
     <TableView fx:id="table" /> 
    </children> 
</Pane> 

私はコントローラとしてこれを使用しています:

public class Controller implements Initializable{ 
    @FXML 
    private TableView<SomeClass> table; 
    // some other things 

    @Override 
    public void initialize(URL url, ResourceBundle bundle) { 
     Objects.requireNonNull(table, "Table was not injected"); 
     // create columns, initialize other stuff 
     table.getColumns().clear(); 
     table.getColumns().addAll(/*some columns */); 
     table.setEditable(false); 
     table.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); 
     table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 
    } 
} 

はなぜCSSは、選択したセルに適用されませんか?

答えて

6

ここでの問題は、JavaFXがセルと行の選択を処理する方法です。

テーブル行またはセル選択モードであるかどうかを表すために使用されるブールプロパティ:

特にcellSelectionEnabledプロパティ、のは一瞬TableViewSelectionModelのJavadocを相談してみましょう。デフォルトでは、表は行選択モードにあり、個々のセルを選択できないことを意味します。 cellSelectionEnabledをtrueに設定すると、セルを選択できるようになります(行は表示されません)。

行選択モードであるため、あなたのセルが選択済みとしてマークされていないと判断できます。
あなたが行(このようなもの)に依存するようにCSSセレクタを調整することにより、この問題を回避することができます

.table-row-cell:selected .cell { 
    -fx-effect: ...; 
} 

あなたが:cell-selectionとテーブルビューに:row-selectionとの組み合わせで、これがさらに便利にすることができます。

.table-view:row-selection .table-row-cell:selected .cell, .table-view:cell-selection .cell:selected { 
    -fx-effect: ...; 
} 

あなたの操作方法に関係なく、選択したセルに適用されますTableViewSelectionModel

関連する問題