“Well yes, but actually no”
Estaba experimentando con Intellij Plugin SDK usando Kotlin US DSL v2, técnicamente no es Java Swing puro. Cree este tab para ver visualmente cuando el width (ancho) se aplicaba y cuando era ignorado.
Cuando dice “extension” significa que se está utilizando una extensión sobre las clases de la librería:
fun Component.setPreferredWidth(width: Int){
this.preferredSize = Dimension(width, this.preferredSize.height)
}
Esta extensión fue creada porque como se puede ver en el ejemplo, si Dimension
no es un nuevo objeto, el nuevo valor en size
no se aplica, también la función está lidiando con los valores anteriores de height
o width
cuando estás alterando sólo uno de ellos.
Espero que no pierdas el tiempo como yo, estoy lejos de ser un experto en Java Swing, pero en mi opinión no es un comportamiento correcto.
Dejo el source code del tab aquí:
fun getTab(): JPanel {
val testWidth = 150
return panel {
indent {
row("textField from rowConstructor: ") {
textField()
}
row("textField from rowConstructor with RowLayout.PARENT_GRID: ") {
textField()
}.layout(RowLayout.PARENT_GRID)
row("textField from JBTextField object ") {
val jbTextField = JBTextField()
cell(jbTextField)
}
row("textField from JBTextField object with cell.horizontalAlign.FILL") {
val jbTextField = JBTextField()
cell(jbTextField).horizontalAlign(HorizontalAlign.FILL)
}
row("textField from JBTextField set $testWidth to width using size.width") {
val jbTextField = JBTextField()
jbTextField.size.width = testWidth
cell(jbTextField)
}
row("textField from JBTextField set $testWidth to width using size.setWidth extension") {
val jbTextField = JBTextField()
jbTextField.setWidth(testWidth)
cell(jbTextField)
}
row("textField from JBTextField set $testWidth to width using preferredSize.width") {
val jbTextField = JBTextField()
jbTextField.preferredSize.width = testWidth
cell(jbTextField)
}
row("textField from JBTextField set $testWidth to width using size.setPreferredWidth extension") {
val jbTextField = JBTextField()
jbTextField.setPreferredWidth(testWidth)
cell(jbTextField)
}
row("textField from JBTextField set $testWidth to width using minimumSize.width") {
val jbTextField = JBTextField()
jbTextField.minimumSize.width = testWidth
cell(jbTextField)
}
row("textField from JBTextField set $testWidth to width using size.setMinimumWidth extension") {
val jbTextField = JBTextField()
jbTextField.setMinimumWidth(testWidth)
cell(jbTextField)
}
}
}
}
Gracias por leer!
Namaste.