Die Scala mit Java Integration funktioniert auch mit Swing problemlos. So können
Scala Swing Komponenten in Java Swing Container eingebunden werden und umgekehrt können
Java Swing Komponenten in eine Scala Swing GUI eingebunden werden. Für die Komponenten Integration
sind zwei Methoden aus scala.swing.Component
verantwortlich:
Aus der Begleitklasse peer : javax.swing.JCompponent
um eine Scala Swing Komponente in Java Container
einzubetten und aus dem Begleitobjekt wrap(javax.swing.JComnponent) : scala.swing.Component
um eine
Java Swing Komponente in Scala Swing einzubetten. Die Methode peer
wird im Trait
scala.swing.UIElement
definiert und von scala.swing.Component
implementiert.
Wer schon länger mit Swing unter Java gearbeitet hat und nun zu Scala umsteigen möchte,
kommt wahrscheinlich nicht umhin, Java Komponenten in Scala Swing einzubauen. Insbesondere
selbst entwickelte Java Swing Komponenten lassen sich nicht "über Nacht" nach
Scala Swing portieren. Auch ein Wrapper ist (zumindest am Anfang) nicht schnell zu programmieren.
Selbst entwickelte Komponenten verhalten sich in unserer Problemstellung wie Standardkomponenten.
Das nachfolgende Beispiel zeigt wie ein JButton
in eine Scala Swing GUI,
mithilfe der Metode scala.swing.Component.wrap
, eingebunden werden kann.
import scala.swing._ object Mix1{ def main(args : Array[String]) { val myFrame = new MyFrame() myFrame.visible = true } } class MyFrame extends Frame{ title = "Mix1" contents = new FlowPanel { contents += new Button("Scala 1") contents += Component.wrap(new javax.swing.JButton("Java")) contents += new Button("Scala 2") } }
Die Ausführung des Programmes führt zur Anzeige folgenden Fensters:
Das Einfügen einer Scala Komponente in eine Java GUI ist genauso einfach
wie das Einfügen einer Java Komponente in eine Scala GUI. Dazu erzeugen
wir einfach wie gewohnt eine Scala Komponente und rufen zum Einbinden die
Methode peer
auf. Diese Vorgehensweise funktioniert auch für
selbst entwickelte Komponenten sofern diese von scala.swing.Component
abgeleitet sind.
Nachfolgend eine Beispielanwendung zur Einbindung einer Scala Komponente in Java.
// Dies ist Java import java.awt.*; import javax.swing.*; public class Mix2 extends JFrame{ public static void main(String[] args) { new Mix2(); } public Mix2() { setLayout(new FlowLayout()); add(new JButton("Java 1")); add(new scala.swing.Button("Scala").peer()); add(new JButton("Java 2")); pack(); setVisible(true); } }
Die Ausführung des Programmes führt zur Anzeige folgenden Fensters: