- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JavaFX 编写一个教育应用程序,用户可以在其中绘制和操作贝塞尔曲线 Line
、QuadCurve
和 CubicCurve
。这些曲线应该能够用鼠标拖动。我有两种选择:
1- 使用类 Line
、QuadCurve
和 CubicCurve
,然后用透明色填充它们,并用另一种颜色描边,说黑色。该选项出现的问题是用户想要拖动一条曲线,但看到拖动的是另一条曲线。这样做的原因是用户要拖动的曲线位于场景图中另一条曲线的下方。例如,在下图中,较小的曲线无法拖动,因为它在场景图中位于较大曲线的下方。
2- 使用类 javafx.scene.shape.Path
,在这种情况下,问题是操纵这样的路径有点复杂,因为它由一些 PathElement
s,并且简单地操作元素不会改变 Path
,除非我们从其 elements 属性中删除一个元素,然后添加一个新元素。因此,我更喜欢方法 1。
如何克服第一种方法中出现的问题?
预先感谢您的帮助。我的程序代码的简化版本如下。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.CubicCurve;
import javafx.scene.shape.QuadCurve;
import javafx.stage.Stage;
public class SampleForStackOverflow extends Application
{
double lastMouseX;
double lastMouseY;
double lastTranslateX;
double lastTranslateY;
@Override
public void start(Stage window)
{
final double STROKE_WIDTH = 5;
QuadCurve quad = new QuadCurve(100, 200, 150, 50, 200, 200);
quad.setFill(Color.TRANSPARENT);
quad.setStroke(Color.BLACK);
quad.setStrokeWidth(STROKE_WIDTH);
quad.setOnMousePressed(e -> {
lastMouseX = e.getSceneX();
lastMouseY = e.getSceneY();
lastTranslateX = quad.getTranslateX();
lastTranslateY = quad.getTranslateY();
});
quad.setOnMouseDragged(e -> followMouse(quad, e));
CubicCurve cubic = new CubicCurve(0, 300, 100, 0, 300, 0, 300, 300);
cubic.setFill(Color.TRANSPARENT);
cubic.setStroke(Color.BLACK);
cubic.setStrokeWidth(STROKE_WIDTH);
cubic.setOnMousePressed(e -> {
lastMouseX = e.getSceneX();
lastMouseY = e.getSceneY();
lastTranslateX = cubic.getTranslateX();
lastTranslateY = cubic.getTranslateY();
});
cubic.setOnMouseDragged(e -> followMouse(cubic, e));
Group root = new Group(quad, cubic);
Scene scene = new Scene(root, 500, 500);
window.setScene(scene);
window.show();
}
private void followMouse(Node node, MouseEvent e)
{
double deltaX = e.getSceneX() - lastMouseX;
double deltaY = e.getSceneY() - lastMouseY;
node.setTranslateX(deltaX + lastTranslateX);
node.setTranslateY(deltaY + lastTranslateY);
}
public static void main(String[] args) {
launch(args);
}
}
最佳答案
您应该明确地将曲线的填充颜色设置为 null 并将 pickOnBounds 设置为 false,而不是在您的第一个场景中使用透明颜色。透明颜色仍会捕获鼠标事件,但 null 不会,当 pickOnBounds 为 false 时,仅当您正好位于形状的彩色部分上方时才会捕获鼠标事件。
关于java - 如何在 JavaFX 场景图中拖动低于另一个 `Shape` 的 `shape`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729465/
我有 5 个对象,a、b、c。d 和 e。 5个对象的hashcode如下: a => 72444 b => 110327396 c => 107151 d => 2017793190 e => 68
我目前正在为我当前的元素创建媒体查询,我目前面临的问题是某些东西导致我的导航栏在宽度低于 600 像素时无法响应。所发生的情况如附图所示。 这个问题其实我在之前的元素中曾经解决过一次,但是我对比了代码
我正在为网页编写媒体查询,并设法为 768 及以下版本编写媒体查询。但它不能正常工作。我想捕捉大多数 320 像素的手机(iphone4、iphone5、iphone3、asus galaxy 7、s
我开发了一个android应用,我所有android低于api 23的用户都无法连接到服务器,其余的都正常工作,从今天(2020-05-30)开始,在这一天之前多年来一直正常工作。 任何想法是什么原因
我正在上一门加密课,主要是作为学术练习,我一直在尝试获得尽可能高的速度。我发现了一些奇怪的事情,即异或字节数组的成本非常低,但在相同大小的字节数组上使用 arraycopy 的成本更高。我想这一定是一
我启动了一个新的应用程序,它大量使用了 firebase 功能以及支持库。我很快就达到了 65k dex 的限制,尽管考虑到应用程序的简单性,我没有理由应该在那里。我知道我需要排除某些我没有用的依赖项
我在 Lollipop 及以下发生了奇怪的崩溃。尝试从服务器下载文件时出现安全异常,但在运行 Marshmallow 及以上版本的设备中,应用程序不会崩溃。 Logcat: Caused by: ja
我正在构建一个相当简单的网站,我需要它具有一定的响应能力。 现在,当我调整浏览器大小时,导航菜单与 Logo 标题重叠,变得非常困惑。 HTML: Prince Innoce
如演示中所示,maxValue 设置为 2017 年,但图表一直到 2020 年。 如何让图表真正停在 2017 年?它在我的页面上占用了太多空间,因此我想对其进行优化 See demo fiddle
我正在用 python 尝试第二个 Project Euler 问题,想了解为什么我的代码不起作用。 此代码查找低于 400 万的偶数斐波那契数的总和 counter = 2 total = 0 wh
我想回答其中一个问题,这些问题有时是由销售人员试图在预算内进行销售而交给我们开发人员的。 我们有一个客户需要以下内容: 支持 AD 身份验证的文档管理系统(即使服务器可能位于其他位置 - 可能位于 V
我有一系列值(Pandas DF 或 Numpy Arr): vals = [0,1,3,4,5,5,4,2,1,0,-1,-2,-3,-2,3,5,8,4,2,0,-1,-3,-8,-20,-10,
当我创建使用 Google map API v2 的项目时,这条线有问题。 GoogleMap map = ((MapFragment) getFragmentManager().findFragme
如何在 UITableView 下方但在 TabBar 上方放置一个按钮,以便 UIButton 保持静止(不随 tableview 滚动)? 这是一张我想要帮凶的照片:http://i.imgur.
我正在使用 MockMvcResultMatchers 来测试我的 Controller 类。 这是一个示例代码 RequestBuilder request = get("/empl
function randomise(){ var ran_number=Math.floor(Math.random() * 100); return ran_number;
我正在尝试为 iOS9 以下的 NSManagedObjects init(context:) 方法“polyfill”。有没有办法为 iOS10 进行预处理器可用性检查? 这是否有意义,或者是否会出
我对 Web 开发的冒险还很陌生。我在使用的网站上遇到问题。在我达到大约 640px 之前,我的响应式设计没有问题。一旦我达到 640px 或将我的 html 全部压缩到左侧,除了我的主页英雄和导航栏
所以,我遇到的问题真的很难解释,但是,当页面宽度小于 600 像素时,我试图让我的导航行为有所不同。我几乎按照我想要的方式工作,但是当我点击菜单按钮时,当它低于 600px 时,它会在它下面的内容顶部
我在一个多语言网站上工作,我想在它的图标下方放置一个固定语言的菜单 div。我正在使用 Bootstrap 3。
我是一名优秀的程序员,十分优秀!