java - JavaFX用滑块绘制线对齐
问题描述
我正在使用 JavaFx MediaPlayer 播放具有滑块作为时间线的视频文件。我想绘制与单击时间轴上任意点的点对齐的线。为此,我使用了以下代码:
在 FXMLDocument.fxml
<VBox prefHeight="126.0" prefWidth="600.0">
<children>
<Slider fx:id="timeSlider" maxWidth="1.7976931348623157E308" prefHeight="14.0" prefWidth="600.0" />
<Group fx:id="group" />
</children>
</VBox>
在 FXMLDocumentController.java 中
timeSlider.setOnMousePressed(e -> {
StackPane p = (StackPane)timeSlider.lookup(".thumb");
double x = p.getLayoutX() +( p.getWidth() /2);
Line line = new Line(x,0,x,100);
line.setFill(Color.RED);
line.setStroke(Color.RED);
line.getStyleClass().clear();
line.getStyleClass().add("multi_graph_scribe");
group.getChildren().add(line);
if(!line.isVisible())
line.setVisible(true);
});
但是该线没有用滑块拇指绘制在正确的位置。有人可以帮我解决上述问题吗?提前致谢
解决方案
所以我发现有两件事让你失望。
首先,Group
它没有按照您和我预期的方式工作,由于某种原因,它总是将 放在Line
拇指的左侧。
其次,x
正在计算的东西看起来应该可以工作,但事实并非如此。在我的测试中getWidth()/2
,使用我使用的方法大约是 5 次,但我将在下面显示更新的代码
所以为了解决第一个问题,我换成Group
了Pane
. 这仍然允许您将物品放在(x,y)
任何需要的地方。
为了解决定位问题,我将表达式更改为
double x = p.getBoundsInParent().getMinX() + ((p.getBoundsInParent().getMaxX()-p.getBoundsInParent().getMinX())/2);
正如你所看到的,它没有使用拇指的宽度,而是使用了它的有界宽度,这是不同的。
这导致了以下代码。
timeSlider.setOnMousePressed(e -> {
StackPane p = (StackPane)timeSlider.lookup(".thumb");
System.out.println(p.getBoundsInParent().getMinX() + " " + p.getBoundsInParent().getMaxX() + " " + p.getWidth());
double x = p.getBoundsInParent().getMinX() + ((p.getBoundsInParent().getMaxX()-p.getBoundsInParent().getMinX())/2);
System.out.println(x);
Line line = new Line(x,0,x,100);
line.setFill(Color.RED);
line.setStroke(Color.RED);
line.getStyleClass().clear();
group.getChildren().add(line);
System.out.println(line.getBoundsInParent());
if(!line.isVisible())
line.setVisible(true);
});
<VBox prefHeight="126.0" prefWidth="600.0">
<children>
<Slider fx:id="timeSlider" maxWidth="1.7976931348623157E308" prefHeight="14.0" prefWidth="600.0" />
<Pane fx:id="group" />
</children>
</VBox>
希望这可以帮助。
推荐阅读
- python - 将谷歌云语音 api 与龙卷风服务器一起使用时出现多个 CLOSE_WAIT。打开的文件太多错误
- mysql - MySQL 驱动程序无法使用 Netbeans-8.2/glassfish-4.1/linux-7.4 加载
- react-native - 在 Opentok-react-native 中,如何获取客户端连接、断开连接等各种事件信息
- c++ - 尝试使用 boost::asio 连接到 SOCKS 5 服务器,但我的连接请求格式错误
- android - 使用 OpenCV 测量不规则形状区域
- javascript - 在 highcharts 中显示 .Net 核心 Web API 响应
- maven - Maven-Release with Jenkins:跳过第二次测试运行
- ios - 消息转发不起作用(Objective-C)
- angular - service is returning object and ngFor not accepting object format data
- .net - 混合架构解决方案(MSsql 和 .NET)