Hi everyone, I’m trying to build a form to fill in...
# compose-desktop
a
Hi everyone, I’m trying to build a form to fill in project details which needs a datepicker. As suggested in the channel i tryed to use the LGoodDatePicker. I made some progress and i can now open the datepicker when the trailing icon of a textfield is clicked. I just need to figure out how to hook everything up correctly, but I’m also quite unsure if this is the right approach. Any feedback would be appreciated. Code in the thread
Copy code
@Composable
fun ProjectForm(data: Project, updateProject: (Project) -> Unit) {
    var dirtyName by remember { mutableStateOf(data.name) }
    var dirtyBeginDate by remember { mutableStateOf(data.beginDate.toString()) }
    var dirtyEndData by remember { mutableStateOf(data.endDate) }
   
    val datePicker = DatePicker()

    Row(Modifier.padding(10.dp)) {
        Column {
            TextField(
                value = dirtyName,
                label = { Text("Project name") },
                onValueChange = { dirtyName = it },
            )
            TextField(
                value = dirtyBeginDate,
                label = { Text("Begin date") },
                onValueChange = {},
                trailingIcon = {
                    IconButton(onClick = {
                        datePicker.togglePopup()
                    }) {
                        SwingDatePicker(datePicker)
                        Icon(
                            imageVector = Icons.Default.Edit,
                            contentDescription = "Open Datepicker"
                        )
                    }
                },
                readOnly = true,
            )
        }
    }
}

@Composable
fun SwingDatePicker(datePicker: DatePicker) {
    SwingPanel(
        background = Color.White,
        modifier = Modifier.size(0.dp,0.dp),
        factory = {
            JPanel().apply {
                setLayout(BoxLayout(this, BoxLayout.Y_AXIS))
                datePicker.settings.visibleDateTextField = false
                add(datePicker)
            }
        }
    )
}
I added this change listener after the datepicker is defined.This works so far for me, but i’m pretty sure this is bad style because it would be called on every recomposition if i’m not mistaken?
Copy code
val datePicker = DatePicker()
datePicker.addDateChangeListener {
    dirtyBeginDate = datePicker.date
    visibleBegin = dirtyBeginDate.toString()
}