我能';我无法让scalaFX菜单栏显示在gui中
我玩ScalaFX是因为我想制作一个加密文件应用程序,但正如标题所说,我遇到了一些问题。我想避免使用括号,因为我认为括号很难看我能';我无法让scalaFX菜单栏显示在gui中,scala,menubar,scalafx,borderpane,Scala,Menubar,Scalafx,Borderpane,我玩ScalaFX是因为我想制作一个加密文件应用程序,但正如标题所说,我遇到了一些问题。我想避免使用括号,因为我认为括号很难看 import scalafx.application.JFXApp import scalafx.application.JFXApp.PrimaryStage import scalafx.scene.Scene import scalafx.scene.control._ import scalafx.scene.layout.BorderPane import s
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.control._
import scalafx.scene.layout.BorderPane
import scalafx.event.ActionEvent
import scalafx.scene.layout.HBox
object Start extends JFXApp {
stage = new PrimaryStage {
title = "Eencrypt THAT"
scene = new Scene(600, 300) {
val border = new BorderPane
root = border
val topMenuBar = new MenuBar
border.top = topMenuBar
val topMenuBarList = List()
topMenuBar.menus = topMenuBarList
val menuFileItems = List()
val menuFile = new Menu("File")
menuFile.items = menuFileItems
val menuFileItemNew = new MenuItem("New...")
menuFileItems :+ menuFileItemNew
val menuFileItemSave = new MenuItem("Save")
menuFileItems :+ menuFileItemSave
topMenuBarList :+ menuFile
val menuEditItems = List()
val menuEdit = new Menu("Edit")
menuEdit.items = menuEditItems
val menuEditItemCut = new MenuItem("Cut")
menuEditItems :+ menuEditItemCut
val menuEditItemCopy = new MenuItem("Copy")
menuEditItems :+ menuEditItemCopy
val menuEditItemPaste = new MenuItem("Paste")
menuEditItems :+ menuEditItemPaste
topMenuBarList :+ menuEdit
border.bottom = Label("Lable")
}
}
}
还有什么方法可以做这样的事情:
topMenuBar.menus = val topMenuBarList = List()
这样一来,它将在一行上,但我仍然有一个命名列表要推。这里的问题之一是
list()
的工作方式与您似乎认为的不同
首先,:+
操作符确实向列表中添加了一个元素(这是一个缓慢的操作,因为每次都必须复制整个列表;您应该更倾向于使用前缀)。但是,此运算符返回一个包含追加元素的新列表,但由于不存储结果,因此会将其丢弃。(ScalaList
s是不可变的元素,不能修改,因此List
操作符返回新的List
实例。这对于Scala的函数式编程范例来说是非常理想的。)
其次,List
s是不可见的。即使可以通过向列表中添加元素来修改列表,topMenuBar.MenuBar.menus
、menuFile.items
或menuEdit.items
也无法了解添加到列表中的内容。所以,您所做的就是将空列表复制到每个元素
有几种选择,一种是在将
List
实例的内容分配给GUI之前初始化实例,另一种是使用observatebuffer
而不是List
。(如果使用observatebuffer
,则必须使用ScalaFX将其绑定到关联属性这里的一个问题是List()
的工作方式与您想象的不一样
首先,:+
操作符确实会将元素附加到列表中(这是一个缓慢的操作,因为每次都必须复制整个列表;您应该更喜欢使用前置)。但是,该操作符返回一个包含附加元素的新列表,但由于您不存储结果,因此会将其丢弃。(ScalaList
s是不可变的元素,不能修改,因此List
操作符返回新的List
实例。这对于Scala的函数式编程范例来说是非常理想的。)
其次,List
s是不可见的。即使您可以通过向列表中添加元素来修改列表,topMenuBar.menu
、menuFile.items
或menuEdit.items
也无法了解列表中添加的内容。因此,您所做的只是将空列表复制到每个元素中
有几种选择,一种是在将List
实例的内容分配给GUI之前初始化实例,另一种是使用observatebuffer
而不是List
。(如果使用ObservableBuffer
,则必须使用ScalaFX将其绑定到关联属性。谢谢你,Mike。我甚至不考虑性能。谢谢你,Mike。我甚至不考虑性能。