Tag: javafx

Javafx:使用FXML的可重用集合

我想将一个集合绑定到FXML中的多个ChoiceBox。 然而,我知道如何使用的唯一方法: 是否可以在控制器中声明集合并在FXML中引用它而不是为每个ChoiceBox复制集合?

JavaFX Media – pause(); 方法使MediaPlayer快进?

MediaPlayer的pause()方法使Media “寻找”了一下。 这真的很烦人,但我没有发现问题出在哪里。 private void playPauseClicked() { Status currentStatus = player.getStatus(); if(currentStatus == Status.PLAYING) { Duration d1 = player.getCurrentTime(); //To measure the difference player.pause(); Duration d2 = player.getCurrentTime(); VIDEO_PAUSED = true; } else if(currentStatus == Status.PAUSED || currentStatus == Status.STOPPED) { player.play(); VIDEO_PAUSED = false; } } 结果不清楚,点d1和d2之间的差异大约为200-400ms。 当然,我试图在暂停媒体之后将我的播放器恢复到d1,但是在恢复媒体后没有工作,结果相同。 在此先感谢任何建议:)

JavaFX InputMap / ActionMap等价?

我终于完全切换到了JavaFX。 我非常热衷于按键function。 你在Swing找到的(非常好的)有一个等效的热键架构吗? 它如何在JavaFX文本控制对象的情况下工作? 如果我看一下javafx.scene.control.TextInputControl我认为一切都会变得清晰。 当然也尝试使用谷歌搜索。 但我不是更聪明的人。 据推测,在编辑文本时,必须有一个最小击键绑定源? 它是否同样等级? 使用Swing,每个JComponent都可以使用1个ActionMap和3个InputMaps (所有这些都可以使用“祖先”映射)。 3个InputMap “类型”由JComponent常量WHEN_FOCUSED , WHEN_IN_FOCUSED_WINDOW和WHEN_ANCESTOR_OF_FOCUSED_COMPONENT确定,它们是非常不言自明的名称。 我真的很想知道有多少Swing用户熟悉所有这些东西,但就个人而言,作为键盘狂热者,我广泛使用这个function。 能够使用setOnKeyPressed将键绑定附加到给定的javafx.scene.Node大概相当于使用WHEN_FOCUSED Swingfunction……但是我想知道其他两个类别呢? 它们是否在当前的JavaFX实现中缺席? 最后,使用Swing,在幕后显然有一个非常复杂的机制,包括击键被“传递”到JComponent对象的层次结构,直到它们被一个InputMap “抓住”(或者没有)…可能必须有一些东西在JavaFX中有点像这样。 有章节和诗句会很高兴……

获取整个文档innerhtml

有没有办法获得整个页面的innerhtml,包括html,head,body等。 我只能调用page.getDocument().getBody().getInnerHTML() …没有page.getDocument().getInnerHTML() …应该没有?

FXML:“初始化后运行”

我有一个JavaFX应用程序,它使用FXML和用Java编写的控制器类。 在Java控制器中,我需要注意不要在FXML Node元素上进行操作,直到它被初始化(否则我会得到一个NullPointerException),这在initialize方法运行之前是无法保证的。 所以我发现自己做了很多事情: 控制器在FXML文件中设置如下: … 然后这是Java文件中的控制器。 class Controller{ @FXML Pane aPane; int globalValue; public void setSomething(int value){ globalValue = value; if(!(aPane == null)){ //possibly null if node not initialized yet aPane.someMethod(globalValue) } } @FXML void initialize(){ aPane.someMethod(globalValue) //guaranteed not null at this point } } 这是有效的,但它很笨重,重复。 我必须创建globalValue属性,以防在调用initialize之前调用setSomething方法,并且我必须确保setSomething方法中的操作与initialize的操作相同。 当然有更优雅的方式来做到这一点。 我知道JavaFX有Platform.runlater(…)方法,可以保证在主应用程序线程上运行一些东西。 Perhpas有像Platform.runAfterInitialize(…)这样的东西,等到初始化,或者如果初始化已经发生则立即运行? 或者,如果有另一种方法可以做到这一点,我愿意接受建议。

JavaFX部署 – 图像丢失

我在JavaFX中用e(fx)clipse完成了一个小型私有项目。 现在我想将它导出为可运行的jar文件。 一切正常,除了窗格和按钮背景图像丢失的事实。 这些图像的路径是在单独的CSS文件中定义的。 该文件中的其他定义实现得很好,只有图像丢失。 任何想法可能是什么原因? 或者是否有更好的方法来发布已完成的Java项目?

Java – ZUI(Zoomable用户界面)

我目前正在做一个需要显示大量数据的小型个人项目,我突然想到实现一种可缩放的用户界面,允许用户浏览大量数据。 我知道现有的项目,比如ZVTM和Piccolo2d ,我可能会最终用于这项工作,但我也很想开始自己写作。 但是,我有点不确定如何开始。 从我一直在阅读的内容看来,像Piccolo2d这样的项目是由于Java中缺乏“场景图”管理而开发的,而Piccolo2d是基于旧版项目的工作开发的,例如“Pad”,“Pad ++”和’爵士乐’。 经过一段时间的谷歌搜索,我可以看到JavaFX中提供了场景图管理,但我想知道Java 7中的Swing是否具有此function。 我有点想一想,我想知道是否可以使用JLayer API实现基本的缩放界面,实质上是根据当前的缩放级别来装饰具有不同层的对象。 举个例子,假设我可以看到最远缩放级别的目录,然后放大将显示目录的内容,并进一步放大将显示目录中存在的文件内的文本。 我已经和Eagle Mode玩了一段时间,所以这是我正在考虑的一个完美的例子。 我知道这是一个很长的问题(如果它真的是一个问题)。 基本上,让我们假设Piccolo等人不存在,而我所拥有的只是核心Java 7 JDK,有人能提出一个好的起点吗? 似乎Piccolo2d很大程度上依赖于Java2d API,所以我想知道API是否已经进步,或者Java 7引入了新的机制来实现类似的效果。 我对可以提供的任何意见或建议感兴趣。 我知道这不是一项容易的任务,但没有任何时间限制,它只是一个个人项目。 谢谢

如何在Spring Boot测试中设置’headless’属性?

我正在测试使用Spring Boot和JavaFX(基于一些优秀的YouTubevideo来解释这一点)。 为了使它与TestFX一起工作,我需要创建如下的上下文: @Override public void init() throws Exception { SpringApplicationBuilder builder = new SpringApplicationBuilder(MyJavaFXApplication.class); builder.headless(false); // Needed for TestFX context = builder.run(getParameters().getRaw().stream().toArray(String[]::new)); FXMLLoader loader = new FXMLLoader(getClass().getResource(“main.fxml”)); loader.setControllerFactory(context::getBean); rootNode = loader.load(); } 我现在想测试这个JavaFX应用程序,为此我使用: @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) public class MyJavaFXApplicationUITest extends TestFXBase { @MockBean private MachineService machineService; @Test public void test() throws InterruptedException { […]

如何在QuadCurve的“笔画”部分检测MouseClick?

我想检测QuadCurve上的鼠标点击事件,但只能检测“笔画”部分。 要清楚图像的绿色部分。 在这里,我使用红色填充值,但在我的应用程序中,我使用透明填充值。 因此,检测曲线可见部分的点击是至关重要的。 示例代码: import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.input.MouseEvent; import javafx.scene.shape.QuadCurve; import javafx.stage.Stage; public class QuadCurveMouseHandling extends Application { @Override public void start(Stage stage) throws Exception { QuadCurve curve = new QuadCurve(); curve.setStartX(10); curve.setStartY(10); curve.setControlX(50); curve.setControlY(250); curve.setEndX(300); curve.setEndY(300); curve.setStyle(“-fx-stroke-width: 7;-fx-stroke: green;-fx-fill: red;”); curve.setOnMouseClicked(new EventHandler() { @Override public void handle(MouseEvent […]

如何在snapToTicks == true时检索最终的Slider值?

我有以下JavaFX场景(请注意snapToTicks的设置): package com.example.javafx; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Slider; import javafx.stage.Stage; public class SliderExample extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { Slider slider = new Slider(0.25, 2.0, 1.0); slider.setShowTickLabels(true); slider.setShowTickMarks(true); slider.setMajorTickUnit(0.25); slider.setMinorTickCount(0); slider.setSnapToTicks(true); // !!!!!!!!!! Scene scene = new Scene(slider, 800, 600); primaryStage.setScene(scene); primaryStage.show(); } […]