我正在尝试使用scalafx在scala上使用javafx2。
我写了一个简单的应用程序并添加了一个菜单和一个菜单项。当我单击菜单并将鼠标悬停在菜单项上时,有时不会突出显示菜单,因此无法单击该菜单。 为了检查我的代码中是否有错误,我在Windows机器上运行完全相同的代码,它只是有效。
我无法理解为什么会这样。我想这与Unity或gnome或linux有关。
还有其他人遇到过同样的问题吗?有没有办法解决它或克服它?
谢谢我提前
代码示例:只有菜单有奇怪的行为
package com.msp.ippokratis.ui
import scalafx.Includes._
import scalafx.collections.ObservableBuffer
import scalafx.collections.ObservableBuffer.observableBuffer2ObservableList
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.layout.{BorderPane,FlowPane,Priority}
import scalafx.scene.control.{MenuBar,MenuItem,Menu,Button,ComboBox}
import scalafx.event.ActionEvent
object Exampl extends JFXApp {
stage = new PrimaryStage {
scene = new Scene {
content = new BorderPane {
prefHeight = 400
prefWidth = 400
top = new MenuBar {
menus = Seq(
new Menu {
text = "File"
items = Seq(
new MenuItem {
text = "Println"
onAction = (evt: ActionEvent) => {
println("Clicked Menu Item Println")
}
})
})
}
center = new FlowPane {
hgrow = Priority.ALWAYS
content = Seq(
new Button {
text = "Sample Button"
onAction = (evt: ActionEvent) => {
println("Button Clicked")
}
},
new ComboBox {
val seq = List("Apple", "Orange", "Mango", "Banana").toSeq
items = ObservableBuffer(seq.asInstanceOf[Seq[Nothing]])
onAction = (evt: ActionEvent) => {
println("Combobox")
}
})
}
}
}
}
}
编辑1:如果我点击菜单并使用键盘导航并按下输入它也适用于Linux。
答案 0 :(得分:2)
过去,我记得在Linux上遇到两个影响基于Java的用户界面的问题:
SWT应用程序(例如Eclipse本身)显示奇怪的鼠标交互。我认为只有当SWT共享库从Ubuntu存储库系统安装时才会出现这种情况。为了合理地确定不是这种情况,尝试从主目录运行所有内容(JRE,JavaFX),根据需要调整路径。如果你是一个额外的偏执狂,删除任何JRE包和任何依赖它们的东西 - 特别是如果它在包名中有'jni'。
尝试登录合成无效的会话。例如,尝试安装“openbox”,注销,当您被提升为登录时,请选择新的openbox会话。如果这适合你,那么我可以通过合成窗口管理器(例如Unity)来寻找一种方法让Java更好地发挥作用。
如果您的应用程序无法在Linux上使用3D硬件加速,那么它将回归到基于Java2D的软件3D渲染。 Java2D被设计为使用名为DGA的X11扩展,主要供应商不再支持它(例如:NVIDIA)。结果是CPU灼热,缓慢且无响应的用户界面。尝试将sun.java2d.pmoffscreen设置为false以防止干扰。
如果您使用的是Java 7,请尝试设置-Dsun.java2d.xrender=true
。
根据您的描述,这似乎与Scala或ScalaFX无关。我希望任何渲染和/或可移植性问题都出现在JavaFX或JRE本身的本机渲染位中。