我使用Scala swing来显示需要包含LWJGL Display对象的窗口。我发现的唯一方法是使用中间AWT Canvas实例将Display对象绑定到Frame并在其中包装:
object Run extends SimpleSwingApplication {
System.setProperty("org.lwjgl.opengl.Window.undecorated", "true")
val initialWindowSize = new Dimension(256, 240)
lazy val top = new MainFrame {
title = s"Nescala ${nescala.BuildInfo.version}"
size = initialWindowSize
visible = true
peer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
peer.setFocusable(true)
peer.setIgnoreRepaint(true)
peer.add(canvas)
peer.pack()
}
def canvas:Canvas = new Canvas {
setPreferredSize(initialWindowSize)
setSize(initialWindowSize)
setFocusable(true)
setIgnoreRepaint(true)
requestFocus()
setVisible(true)
override def addNotify() = {
super.addNotify()
attachDisplay()
}
override def removeNotify() = {
detachDisplay()
super.removeNotify()
}
def attachDisplay(): Unit = {
try {
Display.setParent(this)
Display.create
} catch {
case e:LWJGLException => e.printStackTrace()
}
}
def detachDisplay():Unit = Display.destroy()
}
}
然而,当窗口初始化并且显示器已连接时,它显示在Canvas / Frame顶部下方,可能包括标题栏的高度:
如何将显示器连接到具有相同尺寸的画布?我的印象是窗口尺寸是从父级设置的,尽管我尝试使用相同的值显式设置DisplayMode。另外,是否可以使用LWJGL Display对象而不将重量级AWT Canvas对象设置为父对象(但仍在Swing Ui元素中)?
答案 0 :(得分:0)
关于轻量级/重量级混音,我建议将画布直接添加到帧的默认内容窗格中,这是JPanel
BorderLayout
。此外,pack()
调用撤消之前的size_=
。