Swing scala-调用已创建的新按钮

Swing scala-调用已创建的新按钮,swing,scala,Swing,Scala,我有这个: def top = new MainFrame { contents = new GridBagPanel { def constraints(x: Int, y: Int, .... ) {...} add(btn("A"), constraints(0, 0)) private def btn(name: String): Button = new Button() { text = name } } 而且它不会显示按钮的名称,但是当我用这种方式

我有这个:

def top = new MainFrame {
  contents = new GridBagPanel {
  def constraints(x: Int, y: Int, .... ) {...}

  add(btn("A"), constraints(0, 0))

  private def btn(name: String): Button = new Button() {
    text = name
  }
}
而且它不会显示
按钮的名称,但是当我用这种方式书写时,它很好:

def top = new MainFrame {
  contents = new GridBagPanel {
    def constraints(x: Int, y: Int, .... ) {...}

    add(new Button("A"), constraints(0, 0))
  }
}

我真的不明白为什么?

它可能会起作用,只需通过不使用“name”参数来替换btn方法的声明:

 private def btn(x: String): Button = new Button() {
   text = x
 }
原因是,如果您浏览scala源代码,然后是它的超类,您可以看到Component类中声明了一个名称变量(参见第81行)


因此,在您的第一个代码中,它不会从您传递的参数中获取值,而是从上面的peer.getName中获取“name”,该值为null,最后会使您的按钮文本未正确更新。

woww,我尝试了很多方法,但不明白为什么要获取
null
value。真的谢谢,现在很完美!
def name: String = peer.getName