Scala Java Mix

Einstieg
Java Swing Komponente in einer Scala Swing GUI
Scala Swing Komponente in einer Java Swing GUI

Einstieg

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.

Java Swing Komponente in einer Scala Swing GUI

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")
  }
}
itmapa.de - X2H V 0.11

Die Ausführung des Programmes führt zur Anzeige folgenden Fensters:

Fenster mit Java und Scala Swing GUI Komponenten

Scala Swing Komponente in einer Java Swing GUI

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);
  }
}
itmapa.de - X2H V 0.17

Die Ausführung des Programmes führt zur Anzeige folgenden Fensters:

Fenster mit Scala und Java Swing GUI Komponenten