2015-01-10 3 views
0

У меня есть ListView с пользовательским ListCellFactory. В моей реализации CustomListCell я использую setGraphic для установки графического элемента списка в GridPane, но я не могу позволить GridPane заполнить всю ширину ListView. Ниже приводится краткая версия моего кода:JavaFX Custom ListCell HGrow

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 ограничивающей от another post мой GridPane не будет расти! Независимо от того, какой комбинации ограничений макета я использую это выглядит следующим образом:

Example View

GridPane будет расширяться на всю ширину ListCell (я хочу, чтобы добавить кнопку удаления в днище правого угла). Я схожу с ума, пожалуйста, помогите!

ответ

0

С немного CSS, вы можете проверить, что GridPane является фактически используя все доступное пространство в камере, но ваши средства управления не являются:

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

Таким образом, вы должны выбрать столбец вы хотите взять все свободное пространство и заставить его использовать его.

Предположим, у вас есть один Label в первой ячейке, а один Button во втором, который должен быть выровнен вправо. Все, что вам нужно сделать, это создать новый ColumnConstraints для второго столбца сетки, и установите его, чтобы всегда расти и выравнивать содержание справа:

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); 
} 

И вы будете иметь свой собственный список ячейки:

Custom ListCell

+0

Большое вам спасибо! Вы спасли мне часы (или дни)! Знаете ли вы, как удалить маржу сейчас (так что нет mpadding/margin? Sry Я новичок JavaFX :) – Crine

+0

Стиль по умолчанию для ячеек определяется на modena.css:........................... -fx-padding. 0,25 г 0,583 г 0,25 г 0,583 мкм; } '. Поэтому вам просто нужно переопределить его, установив 'setStyle (" - fx-padding: 0; ");' в конструкторе ячейки. –

+0

Большое спасибо !!! Теперь он отлично работает! Хорошего дня! – Crine

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