@Aukal
Инженер технолог

Как разбить ListView на ячейки?

Нужно разбить ListView на ячейки как в TableView , что бы было видно сообщение , статут отправки его и время. Есть еще вариант использовать tableView , но заголовки столбцов мешают можно ли их убрать , что бы были видны только столбцы ?
  • Вопрос задан
  • 825 просмотров
Решения вопроса 2
@zelan
Кратко обо мне не получится.
Можно вот так:

public class Main extends Application {
    
    @Override
    public void start(Stage primaryStage) throws Exception{
        Pane root = new Pane();
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();


        //подготавливаем список для листа
        ObservableList<TestEntity> list = FXCollections.<TestEntity>observableArrayList();
        
        list.addAll(
                new TestEntity(new Button("button1"), "str1"),
                new TestEntity(new Button("button2"), "str2"),
                new TestEntity(new Button("button3"), "str3"));


        ListView<TestEntity> listView = new ListView<TestEntity>(list);

        //устанавливаем фабрику для отрисовки ячейки.
        listView.setCellFactory(new Callback<ListView<TestEntity>, ListCell<TestEntity>>() {
            @Override
            public ListCell<TestEntity> call(ListView<TestEntity> param) {

                //тут нужно собрать объект ListCell, и вернуть его
                ListCell<TestEntity> listCell = new ListCell<TestEntity>(){

                    //отрисовка происходит здеся
                    @Override
                    protected void updateItem(TestEntity item, boolean empty) {


                        super.updateItem(item, empty);

                        if (empty || item == null) {
                            setText(null);
                            setGraphic(null);
                        } else {

                            //тут конструируешь все что захочешь
                            //или можешь подгружать fxml
                            HBox hBox = new HBox();


                            Label label = new Label(item.getString());
                            hBox.getChildren().addAll(item.getButton(), label);

                            //устанавливаем графику
                            setGraphic(hBox);

                        }
                    }
                };

                return listCell;



            }
        });

        root.getChildren().add(listView);

    }

    class TestEntity{
        Button button;
        String string;
        TestEntity(Button button, String str){
            setButton(button);
            setString(str);
        }

        public Button getButton() {
            return button;
        }

        public void setButton(Button button) {
            this.button = button;
        }

        public String getString() {
            return string;
        }

        public void setString(String string) {
            this.string = string;
        }
    }


    public static void main(String[] args) {
        launch(args);
    }
}
Ответ написан
Можно использовать метод setCellFactory и нарисовать в ячейке желаемое.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы