Tag: javafx

创建一个控件似乎打破了JFX8上的透明阶段

上面的程序应该创建一个带有一些文本的透明舞台,但是舞台看起来不透明: public class Test extends Application { @Override public void start(Stage primaryStage) { new TextArea(); //Comment this out to enable transparency Stage stage = new Stage(); stage.initStyle(StageStyle.TRANSPARENT); Text text = new Text(“Is this transparent?”); VBox box = new VBox(); box.getChildren().add(text); final Scene scene = new Scene(box, 300, 250); scene.setFill(null); stage.setScene(scene); stage.show(); } } new TextArea()行是破坏事物的东西 […]

如何将JFXPanel添加到现有的swing应用程序中

我非常想知道如何将我的JFXPanel(这是一个mp3播放器)集成到现有的Swing应用程序中 – 这是一个添加了几个不同JPanel的JFrame。 我是JavaFX的完全菜鸟,它与swing非常不同。 我能够得到下面的代码来运行并做我想要的。 它将播放我所包含的目录中的mp3文件。这是来自某人编写的样本的代码。 我的问题是这段代码创建了JFrame,主要方法以及此代码中的所有内容。 我有一个已经制作的swing应用程序,我只想添加一个具有以下function的JFXPanel。 JavaFX中有许多新方法我很困惑,不知道如何使用或放在我的Swing应用程序中。 例如invokeLater runLater和initAndShowGUI。 我知道这可能是一个令人烦恼的问题,很难从这样的菜鸟那里回答。 我有一个项目将于明天晚上午夜到期,我真的希望将其作为应用程序的一部分实现。 我们没有在课堂上学习JavaFX,我不知道这对我来说是个棘手的问题。 package application; import java.io.*; import java.util.*; import javafx.application.Platform; import javafx.beans.value.*; import javafx.embed.swing.JFXPanel; import javafx.event.*; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.scene.media.*; import javafx.util.Duration; import javax.swing.*; /** Example of playing all mp3 audio files in a given directory * […]

JavaFX Canvas Double Buffering

我正在使用JavaFX在Java中复制经典游戏Pong。 我使用java.util.Timer,java.util.TimerTask进行游戏循环,使用JavaFX的Canvas进行渲染。 有没有办法为Canvas添加双缓冲,以便动画不会闪烁? 或者我应该采用不同的方法吗? 贝娄是代码。 我删除了它的一些部分,我认为这些部分无关紧要,因为代码长约200行。 Canvas canvas = new Canvas(stageW, stageH); GraphicsContext gc; public void start(Stage stage) throws Exception { Group root = new Group(); gc = canvas.getGraphicsContext2D(); Timer loop = new Timer(); root.getChildren().add(canvas); loop.schedule(new GameLoop(), 0, 1000 / 60); stage.setScene(new Scene(root,stageW, stageH)); stage.show(); } public class GameLoop extends TimerTask { @Override public void […]

TestFx入门

我在使用Oracle的JavaFx HelloWorld应用程序使用TestFx时遇到了一些麻烦: public class HelloWorld extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle(“Hello World!”); Button btn = new Button(); btn.setText(“Say ‘Hello World'”); btn.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { System.out.println(“Hello World!”); } }); StackPane root = new StackPane(); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); […]

scenebulider无法打开fxml文件

我正在JavaFX中创建一个应用程序。 打开场景构建器时收到此错误:“无法打开Loggin.fxml。打开操作失败。请确保所选文件是有效的fxml文档。” 点击“显示详细信息”,它显示了我的错误: java.io.IOException: javafx.fxml.LoadException: /F:/Anusha/stophubsourcetree3/src/application/GetStarted.fxml at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:92) at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.(FXOMDocument.java:80) at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.(FXOMDocument.java:95) at com.oracle.javafx.scenebuilder.kit.editor.EditorController.updateFxomDocument(EditorController.java:2370) at com.oracle.javafx.scenebuilder.kit.editor.EditorController.setFxmlTextAndLocation(EditorController.java:655) at com.oracle.javafx.scenebuilder.app.DocumentWindowController.loadFromFile(DocumentWindowController.java:386) at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.performOpenFiles(SceneBuilderApp.java:579) at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleOpenFilesAction(SceneBuilderApp.java:447) at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleLaunch(SceneBuilderApp.java:427) at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStartGeneric(AppPlatform.java:139) at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStart(AppPlatform.java:106) at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.start(SceneBuilderApp.java:371) at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) at java.lang.Thread.run(Thread.java:744) Caused […]

如何在JavaFX TableView中hover一行时发生一些事情?

现在,当在tableview中选择了一行时,我在鼠标位置显示了对话框。 当我将鼠标hover在每一行上时,我希望显示对话框,似乎有一个CSS:hover所以我认为它可以在某些容量的Java代码中捕获。

JavaFx – 线程“JavaFX Application Thread”java.lang.NullPointerException中的无限exception

我得到以下exception,甚至无法理解它出现在什么地方。 这意味着什么? Exception in thread “JavaFX Application Thread” java.lang.NullPointerException at com.sun.javafx.text.PrismTextLayout.addTextRun(PrismTextLayout.java:755) at com.sun.javafx.text.GlyphLayout.addTextRun(GlyphLayout.java:140) at com.sun.javafx.text.GlyphLayout.breakRuns(GlyphLayout.java:210) at com.sun.javafx.text.PrismTextLayout.buildRuns(PrismTextLayout.java:770) at com.sun.javafx.text.PrismTextLayout.layout(PrismTextLayout.java:1021) at com.sun.javafx.text.PrismTextLayout.ensureLayout(PrismTextLayout.java:223) at com.sun.javafx.text.PrismTextLayout.getBounds(PrismTextLayout.java:246) at javafx.scene.text.Text.getLogicalBounds(Text.java:358) at javafx.scene.text.Text.impl_computeGeomBounds(Text.java:1168) at javafx.scene.Node.updateGeomBounds(Node.java:3556) at javafx.scene.Node.getGeomBounds(Node.java:3509) at javafx.scene.Node.getLocalBounds(Node.java:3457) at javafx.scene.Node.updateTxBounds(Node.java:3620) at javafx.scene.Node.getTransformedBounds(Node.java:3403) at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1724) at javafx.scene.Parent.recomputeBounds(Parent.java:1516) at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1380) at javafx.scene.Node.updateGeomBounds(Node.java:3556) at javafx.scene.Node.getGeomBounds(Node.java:3509) at javafx.scene.Node.getLocalBounds(Node.java:3457) at javafx.scene.Node.updateTxBounds(Node.java:3620) at javafx.scene.Node.getTransformedBounds(Node.java:3403) at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1724) […]

JavaFX上Canvas.snapshot()的替代方案

我正在使用JavaFX中的Canvas开发一个小图形引擎。 在某些时候,我必须渲染一个屏幕外图像,然后使用其GraphicContext在我的主canvas上打印它。 我现在正在使用此代码: private Canvas offScreenCanvas; private GraphicsContext offScreenGraphic; private SnapshotParameters parameters; private WritableImage offScreenImage; […] offScreenCanvas = new Canvas(WIDTH, HEIGHT); offScreenGraphic = offScreenCanvas.getGraphicsContext2D(); parameters = new SnapshotParameters(); parameters.setFill(Color.TRANSPARENT); […] offScreenImage = offScreenCanvas.snapshot(parameters, offScreenImage); graphic.setGlobalBlendMode(BlendMode.HARD_LIGHT); graphic.drawImage(offScreenImage, 0, 0); graphic.setGlobalBlendMode(BlendMode.SRC_OVER); 我的问题是方法snaphot()在每次执行中花费太多时间,约14毫秒。 我需要至少以60fps更新canvas,所以这几乎消耗了我必须画的所有时间。 是否有另一种方法从canvas中获取Image或WritableImage ? 也许另一个不同的过程

JavaFX脚本和Java

简单的问题:我可以混合使用我的桌面应用程序Java和JavaFX Script代码吗? 如果有可能,您能否提供一些示例链接? 或者我可以将自定义的javafx CustomNode-s打包在一个jar中,并在我的项目中与标准SWING组件并排使用它们吗?

如果存在焦点组件,则不执行场景的JavaFX Key Pressed事件

我有一个代码,当按下某个键时执行某些function: scene.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.F1) { doSomething(); } }); 并且它可以工作,但前提是没有聚焦组件,如Button或TextField。 我注意到它按下CTRL + F1,或ALT + F1或SHIFT + F1时有效,但只有F1才有效,如果没有聚焦组件。 有没有办法避免这种情况? —–更新—–正如@James_D所说,我可以使用eventFilter而不是eventHandler来做到这一点: scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> { if (event.getCode().equals(KeyCode.ESCAPE)) { try { FXMLLoader fxmlLoader = new FXMLLoader(TelaPrincipalController.class.getResource(“/br/com/atualy/checkout/layout/telaoperacoescaixa.fxml”)); Parent parent = fxmlLoader.load(); Scene scene = new Scene(parent, 600,400); Stage stage = new Stage(); stage.setScene(scene); stage.initModality(Modality.APPLICATION_MODAL); stage.initOwner(this.stage); stage.showAndWait(); […]