0

カスタム ListCellFactory を持つ ListView があります。CustomListCell の実装では、setGraphic を使用してリスト アイテムのグラフィックを GridPane に設定しますが、GridPane で ListView の幅全体を埋めることができません。以下は私のコードの短いバージョンです:

class MyListCell extends ListCell<MyObject>
{
    private final GridPane _myComponent;

    public MyListCell()
    {
        ...
        setContentDisplay(ContentDisplay.GRAPHIC_ONLY); // does not help
        //this.setPrefWidth(0); // does not help
        myComponent.prefWidthProperty().bind(this.widthProperty()); // does not help
    }

    ...

    @Override
    protected void updateItem(MyObject item, boolean empty)
    {
        ...
        setGraphic(_myComponent);
        ...
    }
}

別の投稿からの prefWidth 境界があっても、私の GridPane は大きくなりません! 使用するレイアウト制約の組み合わせに関係なく、次のようになります。

例のビュー

GridPane は、ListCell の全幅に拡張する必要があります (右下隅に削除ボタンを追加したい)。私は頭がおかしくなりました、助けてください!

4

1 に答える 1

1

少しの css を使用すると、セル内の使用可能なすべてのスペースGridPane実際に使用されていることを確認できますが、コントロールはそうではありません。

public MyListCell(){
    ... 
    _myComponent.setStyle("-fx-border-color: black;");
}

したがって、利用可能なすべてのスペースを確保したい列を選択し、それを強制的に使用する必要があります。

Label最初のセルに 1 つ、2 番目のセルに 1つButtonあり、右揃えにする必要があるとします。必要なことはColumnConstraints、グリッドの 2 番目の列に新しい を作成し、常に拡大するように設定し、コンテンツを右に揃えるだけです。

private final Label label = new Label();
private final Button button = new Button("Click");

public MyListCell(){
    _myComponent.add(label, 0, 0);
    ColumnConstraints c1 = new ColumnConstraints();

    _myComponent.add(button, 1, 0);
    ColumnConstraints c2 = new ColumnConstraints();
    c2.setHgrow(Priority.ALWAYS);
    GridPane.setHalignment(button, HPos.RIGHT);

    _myComponent.getColumnConstraints().addAll(c1,c2);
}

カスタム リスト セルが作成されます。

カスタム ListCell

于 2015-01-10T21:27:21.703 に答える