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

От качания до создания рабочего стола # 5

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

Добро пожаловать в 5. напишите о моем путешествии по преобразованию приложения Java Swing для создания для рабочего стола. Сегодня я сосредоточусь на строках меню и светлых и темных цветах. Строки меню являются жизненно важной метафорой пользовательского интерфейса в настольных операционных системах, поэтому очень хорошо иметь поддержку для них и в Compose Desktop. Как вы вскоре увидите, в данный момент это может быть немного ограничено. Имейте в виду, однако, что в настоящее время Compose для рабочего стола находится в режиме предварительного просмотра.

Чтобы утолить ваш аппетит, пожалуйста, взгляните на этот клип:

Давайте посмотрим, как выбрать светлые или темные цвета.

private fun colors(): Colors = if (isInDarkMode) {
    darkColors()
} else {
    lightColors()
}

Оба темные цвета() и светлые цвета() принадлежат android.composite.материалу.Цвета.кт . находится в темном режиме это переменная, которую я определил так:

private var isInDarkMode: Boolean by observable(true /* isSystemInDarkTheme() */) { _, oldValue, newValue ->
    onIsInDarkModeChanged?.let { it(oldValue, newValue) }
}
private var onIsInDarkModeChanged: ((Boolean, Boolean) -> Unit)? = null

Jetpack Compose на Android позволяет нам проверить, находится ли система в данный момент в темном режиме с является ли система в темной теме() но в настоящее время это не поддерживается в Compose Desktop. По этому поводу есть запрос функции . Пожалуйста, подумайте о том, чтобы проголосовать за это.

Как вы можете видеть, находится В Темном Режиме является наблюдаемым. Когда его значение меняется, я вызываю вкл. В Темном Режиме Изменен если это не null . Да, это выглядит странно. Почему я не вспомнил это внутри составного? Вот как настроена строка меню. Обратите внимание, что это делается до Окно приложения вступает в игру.

AppManager.setMenu(
    MenuBar(Menu("Appearance", MenuItem(
        name = if (isInDarkMode) "Light Mode" else "Dark Mode",
        onClick = {
          isInDarkMode = !isInDarkMode
        },
        shortcut = KeyStroke(Key.L)
    )))
)
AppWindow(title = "TKDupeFinder",
    size = IntSize(600, 400)).show {
  TKDupeFinderContent()
}

Оба Меню и Строка меню в настоящее время являются классами, а не компостируемыми. Чтобы получить глобальную строку меню, вам нужно настроить ее с помощью App Manager.setMenu() . Когда создается новое Окно приложения , оно наследует строку глобального меню. Итак, если вы впоследствии измените строку меню, то Окно приложения ((то есть его строка меню) не будет затронута. Следовательно, мой код

name = if (isInDarkMode) "Light Mode" else "Dark Mode",

не имеет смысла, так как оно выполняется только один раз. Это так, потому что я написал это до того, как узнал то, что только что сказал вам. 😂

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

onClick = {
  isInDarkMode = !isInDarkMode
},

вызовет обратный вызов от моего наблюдаемого, как только он будет установлен. Я делаю это вот так:

@Composable
fun TKDupeFinderContent() {
    var colors by remember { mutableStateOf(colors()) }
    onIsInDarkModeChanged = { _, _ ->
        colors = colors()
    }

Таким образом, составной объект может реагировать на изменения переменных, которые определены снаружи. В заключение давайте резюмируем выводы:

  • В настоящее время меню и строки меню, похоже, не являются компостируемыми
  • В настоящее время изменение строк меню может быть затруднено

Я что-то пропустил? Пожалуйста, поделитесь своими выводами, идеями и предложениями в комментариях.

От качания до реактивного пакета Создайте рабочий стол #1 От качания до реактивного пакета Создайте рабочий стол #2 От качания до создания рабочего стола #3 От качания до создания рабочего стола # 4

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