之前我的项目曾经是Java 8,但现在我使用Java 11和JavaFX 11,现在JavaFX已经从Java 11开始与Java分离了.我没有下载JavaFX SDK但是在pom.xml中添加了以下依赖项以获取必需的模块和jar文件,它们在早期版本中曾经是Java本身的一部分.
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但是我can not be resolved to a type
在@FXML
注释和FXMLLoader
类上遇到了编译错误.
我是否需要添加一些其他/额外的依赖项来解决此问题?
前面只是一个小小的背景:几年来我一直在使用Eclipse开发小型Java/JavaFX应用程序(用于室内使用或与朋友和家人共享)和Java 8,它非常好用且流畅.我完全错过了Java 9-11,所以我想我现在可以尝试一下.事实证明,现在处理事物的方式发生了很大的变化(模块化结构和所有这些),我得说我有点不知所措.
我的意思是,安装已经包含JavaFX的Java 8 JDK,启动Eclipse,获取JavaFX的插件并立即开始编码并不困难.现在使用Java 11,似乎我必须做很多我以前从未处理过的事情,所以它看起来似乎并不容易.JavaFX运行时现在是一个单独的东西,你可以手动把它,或使用Maven,或使用Gradle.从来没有做过这些事情,所以我只是浏览了一下互联网,以便开始使用Maven.在我以某种方式工作后,我的应用程序将无法运行Eclipse,直到我发现我必须为JavaFX运行时提供JVM参数.另外安装e(fx)clipse插件只是以某种方式破坏了我的IDE.
接下来就是简单地导出我的应用程序,这在以前从来就不是问题,因为系统没有找到任何JavaFX运行时或其他任何东西,因此不再真正起作用.然后我找到了一些关于应用程序部署的内容,哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇 为什么它现在必须如此复杂,或者我只是遗漏了什么?如果最终用户必须手动设置JavaFX运行时以使其工作而不是仅安装JRE,那么我应该如何分发这些应用程序?没有意义,所以我想我完全错过了一些东西.
最后一个问题:在"好日子"中使用JavaFX 11设置开发是否有"快速简便"的方法?因为现在我只是想坚持使用Java 8而忘记了所有的大惊小怪,但我还是想保持最新状态,所以...
我无法以编程方式创建新的 WebView。简单的调用new WebView()
会导致以下异常:
java.lang.ExceptionInInitializerError
at javafx.web/javafx.scene.web.WebEngine.<clinit>(WebEngine.java:339)
at javafx.web/javafx.scene.web.WebView.<init>(WebView.java:260)
// omitting unrelated stacktraces
at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics/javafx.scene.Scene$KeyHandler.process(Scene.java:4058)
at javafx.graphics/javafx.scene.Scene$KeyHandler.access$1500(Scene.java:4004)
at javafx.graphics/javafx.scene.Scene.processKeyEvent(Scene.java:2121)
at javafx.graphics/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2595)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:248)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
at javafx.graphics/com.sun.glass.ui.View.handleKeyEvent(View.java:547)
at javafx.graphics/com.sun.glass.ui.View.notifyKey(View.java:971)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.UnsupportedOperationException: not implemented
at javafx.base/com.sun.javafx.logging.PlatformLogger.getName(PlatformLogger.java:121)
at javafx.web/com.sun.webkit.perf.PerfLogger.fullName(PerfLogger.java:155)
at …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Scene Builder 解决我正在使用 javafx 11 和 java11 处理的计算器项目的问题。我试图找出一种方法,让计算器上的按钮在从键盘输入相应的值时改变颜色。是否有解决此问题的方法或 onKeyPressed 等类型的解决方案?
当用户用鼠标单击按钮时,我能够使按钮改变颜色(变为绿色)。这是在我的 css 样式表中完成的。我尝试向控制器类中的 onKeyReleased 方法添加一个方法,并且可以通过这种方式更改背景,但无法确定一种在不导致 UI 延迟的情况下及时更改颜色的方法。我希望 UI 更改类似于大多数计算器(例如标准 Windows 计算器)的颜色。这是用户按住键并改变颜色的地方,当释放键时它又变回。
//main.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root =
FXMLLoader.load(getClass().getResource("calculator.fxml"));
primaryStage.getIcons().add(new Image("CALC.png"));
primaryStage.setTitle(" TS Calculator");
primaryStage.setScene(new Scene(root, 250, 375));
primaryStage.setResizable(true);
primaryStage.setMinHeight(375);
primaryStage.setMinWidth(250);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
/CSS
Button{
-fx-background-color: black;
-fx-text-align: …
Run Code Online (Sandbox Code Playgroud) JavaFX
我正在将使用fromJava 1.7
的应用程序迁移到Java 11
。我遇到的错误之一是关于StageHelper.getStages()
已经消失的方法。我没有找到任何东西可以替代它。您有替代此方法的解决方案吗?感谢您的帮助 !:)
我想防止客户端多次启动应用程序。我想到了实现单例模式。
public class MyClass extends Application {
private static MyClass app = null;
private MyClass (){
super();
}
public static MyClass getInstance(){
if(app == null){
app = new MyClass();
}
return app;
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLLogin.fxml"));
Scene scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.setOpacity(0.95);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该应用程序时,出现错误:
Exception in Application constructor
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498) …
Run Code Online (Sandbox Code Playgroud) 我需要将使用 Eclipse 的 JavaFX SDK 16 和 Java SE-15 制作的项目发送给我的朋友,但是当我尝试导出它时,我很惊讶 Eclipse 没有将 VM 参数插入到导出的文件中:
正如您所知,从 JavaFX SDK 10 开始,JavaFX 库不再是 Java SE 的一部分,因此我们需要通过 VM 参数告诉 Eclipse 在哪里可以找到它们,简而言之,这些 VM 参数对于运行我的程序非常重要。
我已经知道我可以在使用提示命令打开它时插入这些参数,但是有没有更简单的方法?只需单击导出的文件?
如何为 javaFX 项目的单独 css 文件中的所有线条对象应用某种样式?这是java代码:
package com.example.demo;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import java.io.IOException;
public class HelloApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
Pane root = new Pane();
Scene scene = new Scene(root, 1200, 800);
stage.setTitle("Simulink viewer");
Label l1 = new Label("hdkhsd");
l1.setLayoutX(100);
l1.setLayoutY(100);
Label l2 = new Label("helle");
l2.setLayoutX(400);
l2.setLayoutY(400);
root.getChildren().addAll(l1,l2);
Line l = new Line(10,10,90,90);
root.getChildren().add(l);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)