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

时间:2018-07-16 15:30:28

标签: java intellij-idea javafx java-8

我似乎对IntelliJ有一个关于setOnAction lambda函数的问题。经过大量研究,我找不到解决问题的答案。

我正在学习用Java编程(最新的JDK 8版本),最近从NetBeans转到IntelliJ IDE。我编写了一个非常简单的程序,该代码在NetBeans中可以正常运行,但是在使用IntelliJ时遇到了问题。

IntelliJ无法识别setOnAction函数。我已经配置了IDE(项目结构/模块/,并选择8-Lambda,键入注释,...),但是没有成功。我手动添加了: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();
    }
}

GUI类:

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);
    }
}

setOnAction给出以下警告:

can not resolve method setOnAction, (lambda expression)

import javafx.event.ActionEvent;因为未使用而呈灰色,这很奇怪。因此,使用IntelliJ一定是不正确的。

我只有IntelliJ的另一个小问题是,它与主要问题无关,如下:

pane.getChildren().add(btnText);
pane.getChildren().add(txtField);

这两行代码给出以下错误:

add (javafx.scene.Node) in list cannot be applied to (java.awt.TextField)

在NetBeans中,两者都可以正常工作,但是IntelliJ会带来问题。

我希望依靠这个社区的专业帮助,因为我有点被困在这里,除了这些小问题之外,我真的很喜欢IntelliJ IDE。

非常感谢。

问候。

1 个答案:

答案 0 :(得分:3)

在您的GUI类中,您具有以下导入语句:import java.awt.*;*表示您正在导入java.awt包中的所有内容,其中包括java.awt.TextFieldjava.awt.Button和{{1 }}。

这意味着,实际上java.awt.ActionEvent不是btnTextjavafx.scene.control.Button,而是java.awt.Button。 AWT Button没有setOnAction方法,因此您遇到编译错误。这也会影响您的txtField,现在是java.awt.TextField而不是javafx.scene.control.TextField

import java.awt.*import javafx.scene.control.Button替换import javafx.scene.control.TextField替换为import javafx.scene.control.*

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