scala - 鼠标单击并悬停在 javafx2 上的奇怪行为

标签 scala javafx scalafx

我正在尝试在带有 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。

最佳答案

过去,我记得遇到过两个影响 Linux 上基于 Java 的用户界面的问题:

正在加载错误的共享对象

SWT 应用程序,例如 Eclipse 本身,显示出奇怪的鼠标交互。我认为只有在系统范围内从 Ubuntu 存储库安装 SWT 共享库时才会出现这种情况。为了合理地确定情况并非如此,请尝试从您的主目录运行所有内容(JRE、JavaFX),并根据需要调整路径。如果您特别偏执,请删除所有 JRE 包和任何依赖于它们的东西——尤其是当它的包名称中包含“jni”时。

更有可能:禁用合成

尝试登录到合成未生效的 session 。例如,尝试安装“openbox”,注销,当您被提升为登录时选择新的 openbox session 。如果这对您有用,那么我可以寻找一种方法,让 Java 更好地与合成窗口管理器(例如 Unity)配合使用。

更新:也许您已经退回到 Java2D 管道

如果您的应用程序无法在 Linux 上使用 3D 硬件加速,它将回退到基于 Java2D 的软件 3D 渲染。 Java2D 被设计为使用称为 DGA 的 X11 扩展,主要供应商(例如:NVIDIA)不再支持它。结果是大量的 CPU 烧焦、缓慢和 react 迟钝的 UI。尝试设置 sun.java2d.pmoffscreen为 false 以防止其干扰。

如果您使用的是 Java 7,请尝试设置 -Dsun.java2d.xrender=true

这不是什么

根据您的描述,这似乎与 Scala 或 ScalaFX 无关。我预计任何渲染和/或可移植性问题都会出现在 JavaFX 或 JRE 本身的 native 渲染位中。

关于scala - 鼠标单击并悬停在 javafx2 上的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317737/

相关文章:

java - SceneBuilder 无法创建具有给定属性集的自定义组件的实例

java - ImageView 中的 gif 持续时间更长

multithreading - Spark 中每个任务的 CPU 数量

scala - Scala 2.10 中的通用类型解析器

JAVA javaFX menuBar,多个项目,一个方法(场景生成器)

java - 调用一个从scala代码接受 `<? super T>`类型参数的java方法?

java - 使 ScalaFx 在 JDK 8 和 11 上都能工作

scala - (在 Scala 中,)有什么可以用类的泛型类型参数来完成,但不能用抽象类型成员来完成的吗?

scala - 在 Scala 中合并数组

scala - JavaFX/ScalaFX 和剪贴板 : Cannot copy files?