Scala-swing is community-maintained by @Sciss and @benhutchison, with an occasional assist from @SethTisue. If you are interested in helping, then start a thread in the Discussions section, or contact the maintainers.
To use scala-swing from sbt, add this to your build.sbt
:
libraryDependencies += "org.scala-lang.modules" %% "scala-swing" % "3.0.0"
This is a UI library that wraps most of Java Swing for Scala in a straightforward manner. The widget class hierarchy loosely resembles that of Java Swing. The main differences are:
contents
collection. The typical usage style is to create anonymous subclasses of the widgets to
customize their properties, and nest children and event reactions.java.awt.ActionListener
),
a Reactor
instance announces the interest in receiving events by calling listenTo
for
a Publisher
. Publishers are also reactors and listen to themselves per default as a convenience.
A reactor contains an object reactions
which serves as a convenient place to register observers
by adding partial functions that pattern match for any event that the observer is interested in.
This is shown in the examples section below.The library comprises two main packages:
scala.swing
: All widget classes and traits.scala.swing.event
: The event hierarchy.A number of examples can be found in the examples
project.
A good place to start is [16] scala.swing.examples.UIDemo
.
This pulls in the all the other examples into a tabbed window.
$ sbt examples/run
Multiple main classes detected, select one to run:
[1] scala.swing.examples.ButtonApp
[2] scala.swing.examples.CelsiusConverter
[3] scala.swing.examples.CelsiusConverter2
[4] scala.swing.examples.ColorChooserDemo
[5] scala.swing.examples.ComboBoxes
[6] scala.swing.examples.CountButton
[7] scala.swing.examples.Dialogs
[8] scala.swing.examples.GridBagDemo
[9] scala.swing.examples.HelloWorld
[10] scala.swing.examples.LabelTest
[11] scala.swing.examples.LinePainting
[12] scala.swing.examples.ListViewDemo
[13] scala.swing.examples.PopupDemo
[14] scala.swing.examples.SwingApp
[15] scala.swing.examples.TableSelection
[16] scala.swing.examples.UIDemo
Enter number:
The following example shows how to plug components and containers together and react to a mouse click on a button:
import scala.swing._
new Frame {
title = "Hello world"
contents = new FlowPanel {
contents += new Label("Launch rainbows:")
contents += new Button("Click me") {
reactions += {
case event.ButtonClicked(_) =>
println("All the colours!")
}
}
}
pack()
centerOnScreen()
open()
}
1.0.x
branch is compiled with JDK 6 and released for Scala 2.11 and 2.11. The 1.0.x releases can be used with both Scala versions on JDK 6 or newer.2.0.x
branch is compiled with JDK 8 and released for Scala 2.11 and 2.12.
2.1.x
series adds support for Scala 2.13, while dropping Scala 2.10.3.0.x
series adds support for Scala 3.0.The reason to have different major versions is to allow for binary incompatible changes. Also, some java-swing classes were generified in JDK 7 (see SI-3634) and require the scala-swing sources to be adjusted.
Versions now follow classic Scala PVP style with binary compatibility within x.y.*
but not x.*.*
.
The API documentation for scala-swing can be found at https://javadoc.io/doc/org.scala-lang.modules/scala-swing_2.13/latest/index.html for scala 2.13 and https://javadoc.io/doc/org.scala-lang.modules/scala-swing_3/latest/index.html for scala 3.
Current changes are being made on the work
branch.
Last published version is found on the main
branch.
We assume that you are working on a fork of remote upstream
with remote origin
.
git checkout -b release-3.0.0#3.0.0-RC2
(do not name the branch the same as a tag).travis.yml
to reduce the matrix to only the Scala and JDK versions needed to publish the version
(publishing JDK is 8)git commit
git tag -a 'v3.0.0#3.0.0-RC2' -m 'version 3.0.0 for 3.0.0-RC2'
git push upstream v3.0.0#3.0.0-RC2
.Running ci-release.
followed by e.g published scala-swing_3.0.0-RC2 to ...
going into
local sonatype-staging
, followed by the Sonatype plugin uploading the artifacts.