- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实际上正在开发一个没有窗口装饰的 ScalaFX 应用程序。我想要做的是让它可以拖动,这样用户就可以随意移动它。
我通过简单地将拖动鼠标的坐标写入舞台 X/Y 坐标来设法移动舞台。然而,这导致了滞后和闪烁的窗口。
如何在ScalaFX中顺利实现拖动舞台?
最佳答案
这是一个对我来说效果很好的例子。它改编自“JavaFX 8 Introduction by Example”一书中的一个示例。与您的尝试相比如何?
import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.geometry.Point2D
import scalafx.scene.Scene
import scalafx.scene.input.MouseEvent
import scalafx.scene.paint.Color
import scalafx.stage.{WindowEvent, StageStyle}
object DraggableApp extends JFXApp {
private var anchorPt: Point2D = null
private var previousLocation: Point2D = null
stage = new PrimaryStage {
initStyle(StageStyle.TRANSPARENT)
scene = new Scene {
fill = Color.rgb(0, 0, 0, 1.0)
}
}
// Initialize stage to be movable via mouse
initMovablePlayer()
/**
* Initialize the stage to allow the mouse cursor to move the application
* using dragging.
*/
private def initMovablePlayer(): Unit = {
val scene = stage.getScene
scene.onMousePressed = (event: MouseEvent) => anchorPt = new Point2D(event.screenX, event.screenY)
scene.onMouseDragged = (event: MouseEvent) =>
if (anchorPt != null && previousLocation != null) {
stage.x = previousLocation.x + event.screenX - anchorPt.x
stage.y = previousLocation.y + event.screenY - anchorPt.y
}
scene.onMouseReleased = (event: MouseEvent) => previousLocation = new Point2D(stage.getX, stage.getY)
stage.onShown = (event: WindowEvent) => previousLocation = new Point2D(stage.getX, stage.getY)
}
}
编辑:关于您关于调整舞台大小的问题,我尝试了以下变体,它在右键单击和拖动时调整舞台大小;我没有看到任何闪烁(在 OS X 上)。
import javafx.scene.{input => jfxsi}
// (...)
object DraggableApp extends JFXApp {
private var previousHeight = 0.0
private var previousWidth = 0.0
// (...)
private def initMovablePlayer(): Unit = {
val scene = stage.getScene
scene.onMousePressed = (event: MouseEvent) => anchorPt = new Point2D(event.screenX, event.screenY)
scene.onMouseDragged = (event: MouseEvent) =>
if (anchorPt != null && previousLocation != null) {
if (event.getButton == jfxsi.MouseButton.PRIMARY) {
stage.x = previousLocation.x + event.screenX - anchorPt.x
stage.y = previousLocation.y + event.screenY - anchorPt.y
} else if (event.getButton == jfxsi.MouseButton.SECONDARY) {
stage.width = previousWidth + event.screenX - anchorPt.x
stage.height = previousHeight + event.screenY - anchorPt.y
}
}
scene.onMouseReleased = (_: MouseEvent) => reset()
stage.onShown = (_: WindowEvent) => reset()
def reset (): Unit = {
previousLocation = new Point2D(stage.getX, stage.getY)
previousHeight = stage.getHeight
previousWidth = stage.getWidth
}
}
}
关于scalafx - 使 ScalaFX 场景可拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691604/
我实际上正在开发一个没有窗口装饰的 ScalaFX 应用程序。我想要做的是让它可以拖动,这样用户就可以随意移动它。 我通过简单地将拖动鼠标的坐标写入舞台 X/Y 坐标来设法移动舞台。然而,这导致了滞后
我正在使用 ScalaFX 并尝试了解它是如何工作的。作为一个实验(不是我将在生产中做的),我想要一种获取窗口标题的方法。 所以这是我的 Graph.scala 文件: package graphin
我想要完成的是:拥有一个 ScalaFX 应用程序,其中包含一些有序的 对象,称为 Buttons、Labels、Checkboxes 等等,以保持一切井井有条。 这里有一个小例子来说明我的意思: p
我是 Scala 和 SBT 的新手,所以我可能会遗漏一些明显的东西。 我试图在 http://www.scalafx.org/docs/quickstart/ 上编译 HelloWorld 示例 我
我在尝试 scalafx-repo 中的示例时遇到了另一个奇怪的错误。这次我复制了整个文件。但我仍然收到以下错误: Error:(26, 11) type mismatch; found : s
我有一个 ChoiceBox,我想用一个 ObservableList 来设置它。在 JavaFX 中我可能会这样做: ObservableList genres = FXCollections.ob
我想制作一个线性回归程序,将数据可视化给用户。我使用 EJML 进行计算,使用 ScalaFX 进行前端。一切都很好,但是当我使用散点图绘制数据时,从数据绘制的线被设置为覆盖原始数据点的矩形。我想知道
我正在尝试为 按钮 中完成的 onAction Action 定义 onAction scalafx 但我可以。 package App.Desktop import javafx.event.Eve
使用 this code作为示例,我编写了以下代码来跟踪 slider 的变化并将结果放入“speed: Int”变量中: speedSlider.valueProperty.addListener(
使用 this code作为示例,我编写了以下代码来跟踪 slider 的变化并将结果放入“speed: Int”变量中: speedSlider.valueProperty.addListener(
我有一个 myNode: scalafx.scene.Node我想把它变成一个位图,以便我可以将它保存到磁盘,将它与其他位图进行比较等。我认为正确的代码将它变成 scalafx.scene.image
创建自定义 ScalaFX 控件的正确方法到底是什么?我来自 Swing 和 Scala Swing,其中自定义组件只是通过扩展 Component 来创建的。或 Panel .但是当我尝试扩展 Sc
是否可以在 Android 上构建和运行 ScalaFX 应用程序? 我知道 gluon 支持 JavaFX 的交叉构建. ScalaFX 能否与此结合,或通过其他方式结合?有哪些复杂的地方?除其他事
我正在使用 ScalaFX GUI 和 Akka 远程处理网络制作多人游戏客户端。当我的客户端收到游戏数据时,它会将其存储在 Model.gameData 中。我需要我的 GUI 来响应这个变量变化。
我是 ScalaFX 新手。我正在尝试调整基本的 TableView 示例,以包含整数列。 到目前为止,我已经想出了以下代码: class Person(firstName_ : String, ag
javafx 现已包含在 oracle-jdk 中。 scalafx 在其存储库中提供了美味的示例 我无法回答的主要问题是“如何开始使用 scalafx”? 如何在我的 sbt 项目中添加 scala
目前正在尝试使用 ScalaFX。 想象一下以下情况: 我有一些节点,它们通过一些边连接。 现在,当我单击鼠标按钮时,我想选择鼠标单击旁边的按钮,例如如果我在 1 和 2 之间单击,我希望选择这两个,
复制文件不起作用: def toClipboard(selectedLinesOnly: Boolean = false): Unit = { val clipboard = Clipbo
我正在编写一个图像库,供入门编程学生使用。 (我从 DrRacket 的图像库中窃取了想法和模式。) https://github.com/dupontmanualhs/dm-image 它主要是用
我是 ScalaFx 的新手,想创建一个包含可编辑 bool 列的 TableView,其中包含 CheckBox s(以及带有 TextFields 的可编辑 String 和 Int 列)。 我想
我是一名优秀的程序员,十分优秀!