Scala MenuListener

Spin

Top Contributor
Hallo liebe Community,

wie kann ich hier meinen MenuItems einen Listener hinzufügen ohne die Variablen global bzw. statisch zu machen.

Habe es mit listenTo versucht aber nichts geht. Danke für Hilfe.

Code:

Java:
import scala.swing._
import java.awt.{Dimension, Point, Toolkit}
import javax.swing.UIManager
import java.awt.event.ActionListener

object Main extends SimpleSwingApplication {

  /**
   * frame height
   */
   val height:Int = 480;

  /**
   * frame width
   */
  val width:Int = 640;


  /**
   * create main frame
   * @override
   */
  override def top = new MainFrame {
    this.title = "Gamedevelopment in Scala"
    this.location = Main.getCenterLocation()
    this.size = new Dimension(Main.width, Main.height)
    this.maximumSize = new Dimension(Main.width, Main.height)

    //look and feel
    Main.changeLookAndFeel()

    //this.iconImage = Toolkit.getDefaultToolkit.getImage(Main.resourceFromClassloader(''))

    // menu bar
    this.menuBar = Main.getMenuBar()

    

  }

  /**
   * get center location depends on screen size
   */
  def getCenterLocation() : Point = {
      // get current screen size
      val screenSize  = Toolkit.getDefaultToolkit.getScreenSize()

      val location = new Point((screenSize.width/2) - (Main.width/2),
                               (screenSize.height/2) - (Main.height/2))

      return location
  }

  /**
   * change to a nimbus look and feel
   */
  def changeLookAndFeel() : Unit = {
	      try{
           // set new look and feel
	         UIManager.setLookAndFeel(new com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);
	      } catch {
          // catch default case_
	         case _ => UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	      }
  }

  /**
   * get frame menu bar
   */
  def getMenuBar() : MenuBar =  {
      val menuBar = new MenuBar {
        // component buffer
        contents += new Menu("File"){
          contents += new MenuItem("New")
          contents += new Separator()
          contents += new MenuItem("Quit")
        }
        contents += new Menu("Help"){
          contents += new MenuItem("About")
        }
      }

      return menuBar
  }
}


grüße Spin
 

Spin

Top Contributor
Moin Jay,

ich habe ed endlich:

Java:
private def _getMenuBar() : MenuBar =  {
      val menuBar = new MenuBar {
        // component buffer
        contents += (new Menu("Game Menu"){
          contents += (new MenuItem(Action("New"){
            System.exit(0)
          }))
          contents += new Separator()
          contents += (new MenuItem(Action("Quit"){
            System.exit(0)
          }))
        })
        contents += new Menu("Help"){
          contents += new MenuItem("About")
        }
      }

      return menuBar
  }
}
Ich werd jetzt mal eine Klasse bauen die von Publisher erbt und diese dann hinzufügen.
Ich weiss nicht ob das listenTo überhauüt noch gang und gebe ist.
Das meckert immer .....:/

Aber bin noch ziemlich am anfang mit scala , daher ist rumärgern legitim ;)
Danke für Tipp, weitere gute Links sind willkommen. Habe schon einiges gefunden und versuche darauf aufzubauen.

ABER : SCALA ...ist echt gewöhnungsbedürftig!
 
Zuletzt bearbeitet von einem Moderator:

escalate

Mitglied
ABER : SCALA ...ist echt gewöhnungsbedürftig!
Das geht wohl den meisten am Anfang so. Die Begeisterung kommt später (hoffentlich) ;)

Mit Swing und Scala habe ich allerdings auch noch nicht programmiert (steht aber auf der TODO-Liste), daher kann ich jetzt auch nicht sagen, ob mal das noch deutlich besser machen kann.

Das "val menuBar =" und das return menuBar am Schluss kannst du dir aber sparen, geht ohne genauso gut ;). Die Typangabe der Funktion würde man auch eher weglassen, weil das sowieso offensichtlich ist.
 

Landei

Top Contributor
Man kann direkt schreiben...

Java:
private def _getMenuBar() = new MenuBar {
   ...

Ob es "drinne" besser geht, müsste ich erst ausprobieren...
 

Landei

Top Contributor
OK, mal ein erster Versuch:

Java:
import scala.swing._
import Swing._
import java.awt.Toolkit
import javax.swing.UIManager
 
object Main extends SimpleSwingApplication {
 
  /**
   * frame width and height
   */
  val frameSize = new Dimension(640, 480)
  val screenSize  = Toolkit.getDefaultToolkit.getScreenSize
 
  /**
   * create main frame
   * @override
   */
  override def top = new MainFrame {
    this.title = "Gamedevelopment in Scala"
    this.location = getCenterLocation()
    this.size = frameSize
    this.maximumSize = frameSize
 
    //look and feel
    changeLookAndFeel()
 
    //this.iconImage = Toolkit.getDefaultToolkit.getImage(Main.resourceFromClassloader(''))
 
    menuBar = new MenuBar {
      // component buffer
      contents ++= new Menu("Game Menu"){
          contents ++= new MenuItem(Action("New"){
                System.exit(0)
              }) ::
              new Separator() ::
              new MenuItem(Action("Quit"){
                System.exit(0)
              }) :: Nil
      } ::
      new Menu("Help"){
        contents += new MenuItem("About")
      } :: Nil
    }
 
  }
 
  /**
   * get center location depends on screen size
   */
  def getCenterLocation() : Point = 
    ((screenSize.width - frameSize.width) /2,
     (screenSize.height - frameSize.height)/2)
 
  /**
   * change to a nimbus look and feel
   */
  def changeLookAndFeel() : Unit = {
    try{
      // set new look and feel
      UIManager.setLookAndFeel(new com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel);
    } catch {
      // catch default case_
      case _ => UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
  }
  
}

Mit [c]++=[/c] kann man mehrere Elemente an einen [c]Buffer[/c] wie [c]contents[/c] anfügen. Diese müssen als [c]Traversable[/c] vorliegen, also z.B. als eine [c]Seq[/c] oder [c]List[/c]. Ich habe hier eine [c]List[/c] genommen, weil die alternative Schreibweise [c]1 :: 2 :: 3 :: Nil[/c] optisch gut passt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Unterschied funktionial <-> OO anhand von Scala <-> Java JVM Sprachen: Kotlin, Scala, Groovy, Jython... 5
M Experten für Scala-Play- Programmierung gesucht!! JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
M Scala-Programm mit Netbeans compilieren JVM Sprachen: Kotlin, Scala, Groovy, Jython... 1
M Suche Scala Entwickler (Umsteiger [JAVA]) für Zusammenarbeit an privatem Projekt JVM Sprachen: Kotlin, Scala, Groovy, Jython... 7
R Frage zu Scala Code JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Landei Scala Scala 2.10 RC JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
schlingel Scala Schulung - Gratis vom Scala-Schöpfer JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Landei Scala Scala-Kritik JVM Sprachen: Kotlin, Scala, Groovy, Jython... 151
Spin Scala Eclipse IDE JVM Sprachen: Kotlin, Scala, Groovy, Jython... 7
Spin Funktionen vs Methods in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 9
Landei Scala Freies eBook "Scala for the impatient" JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
Spin Arithmetik in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 32
0x7F800000 Numerik in Scala (Performance) JVM Sprachen: Kotlin, Scala, Groovy, Jython... 14
Spin Scala in Eclipse will nicht. JVM Sprachen: Kotlin, Scala, Groovy, Jython... 15
Landei Scala Deutsches Scala-Tutorial JVM Sprachen: Kotlin, Scala, Groovy, Jython... 3
B Scala oder Clojure JVM Sprachen: Kotlin, Scala, Groovy, Jython... 6
Landei Scala "Programming in Scala" - erste Ausgabe kostenlos JVM Sprachen: Kotlin, Scala, Groovy, Jython... 1
W Scala *.Scala to *.jar JVM Sprachen: Kotlin, Scala, Groovy, Jython... 6
H Scala und Aspekte JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
S Scala Klasse.class in Scala? JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
B Scala Scala und Netbeans GUI Editor JVM Sprachen: Kotlin, Scala, Groovy, Jython... 15
S Scala: Parser und Lexical JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
D Wie manche ich das in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 12
S Scala: Static - Konstruktor?? JVM Sprachen: Kotlin, Scala, Groovy, Jython... 5
G Scala IDE JVM Sprachen: Kotlin, Scala, Groovy, Jython... 18
A Scala und J2ME JVM Sprachen: Kotlin, Scala, Groovy, Jython... 2
S Scala Fragen zu Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 21
D (Mathe-) Vektoren in Scala JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4
Landei Scala im Kommen :-) JVM Sprachen: Kotlin, Scala, Groovy, Jython... 4

Ähnliche Java Themen

Neue Themen


Oben