Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';我无法让scalaFX菜单栏显示在gui中_Scala_Menubar_Scalafx_Borderpane - Fatal编程技术网

我能';我无法让scalaFX菜单栏显示在gui中

我能';我无法让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

我玩ScalaFX是因为我想制作一个加密文件应用程序,但正如标题所说,我遇到了一些问题。我想避免使用括号,因为我认为括号很难看

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()
的工作方式与您似乎认为的不同

首先,
:+
操作符确实向列表中添加了一个元素(这是一个缓慢的操作,因为每次都必须复制整个列表;您应该更倾向于使用前缀)。但是,此运算符返回一个包含追加元素的新列表,但由于不存储结果,因此会将其丢弃。(Scala
List
s是不可变的元素,不能修改,因此
List
操作符返回新的
List
实例。这对于Scala的函数式编程范例来说是非常理想的。)

其次,
List
s是不可见的。即使可以通过向列表中添加元素来修改列表,
topMenuBar.MenuBar.menus
menuFile.items
menuEdit.items
也无法了解添加到列表中的内容。所以,您所做的就是将空列表复制到每个元素


有几种选择,一种是在将
List
实例的内容分配给GUI之前初始化实例,另一种是使用
observatebuffer
而不是
List
。(如果使用
observatebuffer
,则必须使用ScalaFX
将其绑定到关联属性这里的一个问题是
List()
的工作方式与您想象的不一样

首先,
:+
操作符确实会将元素附加到列表中(这是一个缓慢的操作,因为每次都必须复制整个列表;您应该更喜欢使用前置)。但是,该操作符返回一个包含附加元素的新列表,但由于您不存储结果,因此会将其丢弃。(Scala
List
s是不可变的元素,不能修改,因此
List
操作符返回新的
List
实例。这对于Scala的函数式编程范例来说是非常理想的。)

其次,
List
s是不可见的。即使您可以通过向列表中添加元素来修改列表,
topMenuBar.menu
menuFile.items
menuEdit.items
也无法了解列表中添加的内容。因此,您所做的只是将空列表复制到每个元素中


有几种选择,一种是在将
List
实例的内容分配给GUI之前初始化实例,另一种是使用
observatebuffer
而不是
List
。(如果使用
ObservableBuffer
,则必须使用ScalaFX
将其绑定到关联属性。谢谢你,Mike。我甚至不考虑性能。谢谢你,Mike。我甚至不考虑性能。