ActionEvent 库(JDK 8)无法识别 IntelliJ setOnAction

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。

提前谢谢了。

问候。

Sla*_*law 8

在您的GUI课程中,您有以下导入语句:import java.awt.*;. 这*意味着您要导入包中的所有内容,java.awt其中包括(除其他外):java.awt.TextFieldjava.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.Buttonimport javafx.scene.control.TextField将其替换为import javafx.scene.control.*.

如果导入java.awt.*是故意的,将不同的 GUI 工具包混合在一起通常是一个坏主意。