0 java javafx intellij-idea java-8
我似乎对 IntelliJ 有关于setOnActionlambda 函数的问题。经过大量研究,我找不到我的问题的答案。
我正在学习用 Java(最新的 JDK 8 版本)编程,最近从 NetBeans 转移到 IntelliJ IDE。我编写了一个非常简单的程序,代码在 NetBeans 中完美运行,但是我在使用 IntelliJ 时遇到了问题。
setOnActionIntelliJ 无法识别该函数。我已经配置了 IDE(项目结构/模块/并选择了 8 - Lambda's,类型注释,...)但没有成功。我手动添加:import javafx.event.ActionEvent;
我还配置了(设置/常规/自动导入/动态添加明确的导入)。
该程序包含两个类,一个 Main 类和一个 GUI 类。
主要类:
package fxvb0203;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class fxvb0203 extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage)
{
FlowPane root = new FlowPane();
Scene scene = new Scene(root);
new GUI(root);
primaryStage.setTitle("Test");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
图形界面类:
package fxvb0203;
import javafx.scene.layout.FlowPane;
import javafx.event.ActionEvent;
import java.awt.*;
public class GUI
{
private final Button btnText = new Button("Text");
private final TextField txtField = new TextField();
public GUI(FlowPane pane)
{
btnText.setOnAction(event ->
{
txtField.setText("text");
});
pane.getChildren().add(btnText);
pane.getChildren().add(txtField);
}
}
Run Code Online (Sandbox Code Playgroud)
setOnAction 给出以下警告:
can not resolve method setOnAction, (lambda expression)
Run Code Online (Sandbox Code Playgroud)
import javafx.event.ActionEvent;由于未使用而显示为灰色,这很奇怪。所以它一定是 IntelliJ 不正确的地方。
我仅使用 IntelliJ 遇到的另一个小问题,但与主要问题无关,如下所示:
pane.getChildren().add(btnText);
pane.getChildren().add(txtField);
Run Code Online (Sandbox Code Playgroud)
这两行代码给出了以下错误:
add (javafx.scene.Node) in list cannot be applied to (java.awt.TextField)
Run Code Online (Sandbox Code Playgroud)
在 NetBeans 中,两者都可以正常工作,但 IntelliJ 会出现问题。
我希望依靠这个社区的专业帮助,因为我有点卡在这里,除了这些小问题我真的很喜欢 IntelliJ IDE。
提前谢谢了。
问候。
在您的GUI课程中,您有以下导入语句:import java.awt.*;. 这*意味着您要导入包中的所有内容,java.awt其中包括(除其他外):java.awt.TextField和java.awt.Button.
这意味着它实际上不是btnTextajavafx.scene.control.Button它实际上是 a java.awt.Button。AWTButton没有setOnAction方法,因此您会收到编译错误。这也会影响您的txtFieldwhich 现在是 ajava.awt.TextField而不是 a javafx.scene.control.TextField。
替换import java.awt.*为import javafx.scene.control.Button和import javafx.scene.control.TextField;或将其替换为import javafx.scene.control.*.
如果导入java.awt.*是故意的,将不同的 GUI 工具包混合在一起通常是一个坏主意。