scala - 调用创建的新按钮

时间:2014-11-22 14:45:38

标签: 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
  }
}

并且它没有显示button的名称,但是当我以这种方式书写时,它很好:

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

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

我真的不明白为什么?

1 个答案:

答案 0 :(得分:2)

它可以工作,只是通过不使用" name"来替换btn方法的声明。参数:

 private def btn(x: String): Button = new Button() {
   text = x
 }

原因是,如果您浏览scala Button源代码然后浏览其超类Component,您可以看到在Component类中声明了一个名称变量(参见第81行)

def name: String = peer.getName

所以在你的第一个代码中,不是从你传递的参数中获取值,而是得到" name"从peer.getName上面,它是null,最后使你的按钮文本没有正确更新。