我知道這個問題是兩歲,但我認爲這是值得與另一個答案更新。這裏是我的解決方案:
import javax.swing.JPopupMenu
import scala.swing.{ Component, MenuItem }
import scala.swing.SequentialContainer.Wrapper
object PopupMenu {
private[PopupMenu] trait JPopupMenuMixin { def popupMenuWrapper: PopupMenu }
}
class PopupMenu extends Component with Wrapper {
override lazy val peer: JPopupMenu = new JPopupMenu with PopupMenu.JPopupMenuMixin with SuperMixin {
def popupMenuWrapper = PopupMenu.this
}
def show(invoker: Component, x: Int, y: Int): Unit = peer.show(invoker.peer, x, y)
/* Create any other peer methods here */
}
下面是一些示例使用代碼:
val popupMenu = new PopupMenu {
contents += new Menu("menu 1") {
contents += new RadioMenuItem("radio 1.1")
contents += new RadioMenuItem("radio 1.2")
}
contents += new Menu("menu 2") {
contents += new RadioMenuItem("radio 2.1")
contents += new RadioMenuItem("radio 2.2")
}
}
val button = new Button("Show Popup Menu")
reactions += {
case e: ButtonClicked => popupMenu.show(button, 0, button.bounds.height)
}
listenTo(button)
需要注意以下幾點:
- 使用SuperMixin類爲scala-swing-design.pdf建議,在一節「爲指導方針寫入包裝器「小節」使用包裝器高速緩存器「。
- Mixin scala.swing.SequentialContainer.Wrapper,這樣我就可以使用
contents +=
構造,所以我的彈出菜單代碼看起來像其他的scala-swing菜單構造代碼。
- 雖然問題使用
JPopupMenu.setVisible
,我想你會打算使用方法JPopupMenu.show
,所以你可以控制彈出菜單的位置。 (只要將它設置爲可見就會將它放在屏幕的左上角)
爲什麼這個(彈出菜單)不是標準scala swing工具包的一部分?我必須說,由於缺乏文檔以及一些非常基本的構造,我感到有點驚慌。讓我懷疑是否有人實際使用該工具包。 – 2009-06-03 07:12:45