Рубрики
Без рубрики

От Swing до Compose Desktop #4

Добро пожаловать в 4. сообщение о моем путешествии по преобразованию приложения Java Swing в Compose для рабочего стола. Тода… С тегами java, kotlin, ux.

Добро пожаловать в 4. сообщение о моем путешествии по преобразованию приложения Java Swing в Compose для рабочего стола. Сегодня я сосредоточусь на множественном выборе в списке. Когда TKDupeFinder обнаруживает, скажем, 10 файлов с одинаковым хэшем MD5, их содержимое, скорее всего, одно и то же. Следовательно, 9 из них являются кандидатами на удаление. Приложение предоставит две кнопки, Показать и Удалить , который, ну, покажет или удалит файлы, которые были выбраны в списке. Давайте посмотрим, как мы мочь

  • создайте прокручиваемый список
  • и разрешить множественный выбор

Чтобы утолить ваш аппетит, вот как все будет выглядеть:

И вот появляется код, который творит волшебство.

@Composable
fun ThirdRow(currentPos: Int, checksums: List,
             selected: SnapshotStateMap) {
    val items = if (checksums.isNotEmpty())
        df.getFiles(checksums[currentPos]) else emptyList()
    LazyColumnForIndexed(items,
            modifier = Modifier.fillMaxSize().padding(8.dp),
            itemContent = { index, item ->
                val current = selected[index] ?: false
                ListItem(secondaryText = { Text(item.parent) },
                        modifier = Modifier.toggleable(onValueChange = {
                            selected[index] = !current
                        },
                                value = current)
                                .background(if (current)
                                    Color.LightGray else Color.Transparent),
                        text = { Text(item.name) })
            })
}

Ленивый столбец Для Indexed() предоставляет список. Содержимое, которое будет отображаться, уже есть. currentPos определяет контрольную сумму, файлы которой должны быть представлены. Итак, с помощью df.GetFiles(контрольные суммы[currentPos])

Когда необходимо создать новый элемент списка, вызывается содержимое элемента . Он получает индекс и элемент. Я использую индекс, чтобы отслеживать, выбран ли элемент в данный момент. Эта карта передается в мой composable ( SnapshotStateMap Boolean> ), потому что ее тоже нужно изменить где-то в другом месте. Boolean>

ListItem s можно настроить так, чтобы он содержал несколько строк текста и значок. Самое главное, вы можете использовать его модификатор , чтобы сделать его переключаемым . Если это произойдет, вызывается onValueChange . Как вы можете видеть, мне просто нужно перевернуть Логическое значение . В зависимости от текущего значения мой элемент имеет либо прозрачный, либо светло-серый фон.

Как вы можете видеть, с помощью всего нескольких строк кода вы получаете красивый прокручиваемый список с множественным выбором. Вам нужно было реализовать несколько списков выбора в Compose? Как вы это реализовали? Пожалуйста, поделитесь своим решением в комментариях, я хотел бы их услышать.

Из Swing в Jetpack Создайте рабочий стол #1 Из Swing в Jetpack Создайте рабочий стол #2 Из Swing в Compose Desktop # 3

Оригинал: “https://dev.to/tkuenneth/from-swing-to-compose-desktop-4-35c1”