2011-09-21 126 views
3

我在创建包含Scala编程语言中单选按钮的ButtonGroup时遇到了麻烦。我使用的代码如下:如何在包含RadioButtons的scala中创建一个新的ButtonGroup?

val buttongroup = new ButtonGroup { 
    buttons += new RadioButton("One") 
    buttons += new RadioButton("Two") 
} 

,我的显示按钮组代码是了BorderPanel内:

layout += new BoxPanel(Orientation.Vertical) { 
    buttongroup 
} -> BorderPanel.Position.West 

然而,没有任何显示。我查阅过的API和我不确定有什么问题!

回答

3

你应该添加包含按钮面板中的列表,而不是本身的ButtonGroup,例如: -


val radios = List(new RadioButton("One"), new RadioButton("two")) 
layout += new BoxPanel(Orientation.Vertical) { 
    contents ++= radios   
} 

this example看到斯卡拉摆动包本身。

+0

感谢您的帮助,我真的很感激它。你知道为什么它是内容++ =反对内容+ =在这种情况下。很抱歉的基本问题! – MRN

+0

内容是一个(可变的)scala缓冲区,请参阅http://www.scala-lang.org/api/current/index.html#scala.collection.mutable.Buffer,++ =将给定集合中的所有元素附加到Buffer,而+ =只将一个元素附加到缓冲区。 –

+0

还有一件事 - 我保证。我试图用一个匹配来查看按钮组的列表中的各种情况,就像您提供的示例一样。 DEF选定= { buttonGroup.selected.get匹配{ 情况下 'buttonOne'=> 的println(为 “buttonOne”) } } 但它给我,图案类型不是与预期接受该错误消息类型,并且该行有多个标记。任何想法是什么在这里? – MRN

0

虽然按钮组使这些按钮变得互斥,但您仍然需要将各个按钮添加到面板。您可以使用ButtonGroup.buttons获取按钮列表:

layout += new BoxPanel(Orientation.Vertical) { 
    val buttongroup = new ButtonGroup { 
    buttons += new RadioButton("One") 
    buttons += new RadioButton("Two") 
    } 
    contents ++= buttongroup.buttons 
} -> BorderPanel.Position.West 

如果您希望在创建工具栏时,要选择的第一个按钮,你可以添加: buttongroup.select(buttongroup.buttons.head)

相关问题