By Alvin Alexander. Last updated: November 19, 2017
To center a window/frame in a Scala Swing application, add this line to your frame definition:
peer.setLocationRelativeTo(null)
Here’s what this looks like in the top method definition inside a SimpleSwingApplication:
def top = new MainFrame {
title = "Convert Celsius / Fahrenheit"
contents = new FlowPanel(celsius, new Label(" Celsius = "),
fahrenheit, new Label(" Fahrenheit"))
peer.setLocationRelativeTo(null)
}
In case that doesn’t make sense, here’s the source code for a complete Scala Swing application:
package tests
import scala.swing._
import scala.swing.event.EditDone
import scala.swing.event.WindowActivated
object Converter extends SimpleSwingApplication {
def newField = new TextField {
text = "0"
columns = 5
}
val celsius = newField
val fahrenheit = newField
def top = new MainFrame {
title = "Convert Celsius / Fahrenheit"
contents = new FlowPanel(celsius, new Label(" Celsius = "),
fahrenheit, new Label(" Fahrenheit"))
peer.setLocationRelativeTo(null)
}
listenTo(fahrenheit, celsius)
reactions += {
case EditDone(`fahrenheit`) =>
val f = Integer.parseInt(fahrenheit.text)
val c = (f - 32) * 5 / 9
celsius.text = c.toString
case EditDone(`celsius`) =>
val c = Integer.parseInt(celsius.text)
val f = c * 9 / 5 + 32
fahrenheit.text = f.toString
}
}
At the moment that code is just a modified version of the celsius to fahrenheit converter you can find online (like this one at Artima), but it drives me crazy when windows don't open centered, so I thought this would be a relatively simple example.

