首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ setOnAction未被ActionEvent库识别(JDK 8)

IntelliJ setOnAction未被ActionEvent库识别(JDK 8)
EN

Stack Overflow用户
提问于 2018-07-16 15:30:27
回答 1查看 1.9K关注 0票数 0

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

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

setOnAction函数不被IntelliJ识别。我已经配置了IDE (Project /Modules/并选择了8-Lambda,类型注释,.)但没有成功。我手动添加:import javafx.event.ActionEvent;

我还配置了(设置/通用/自动导入/动态添加明确的导入)。

程序包含两个类,一个主类和一个GUI类。

主修班:

代码语言:javascript
复制
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();
    }
}

桂班:

代码语言:javascript
复制
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发出以下警告:

代码语言:javascript
复制
can not resolve method setOnAction, (lambda expression)

import javafx.event.ActionEvent;是灰色的,因为它没有被使用,这是奇怪的。因此,一定是与IntelliJ不正确的东西。

我只使用IntelliJ时遇到的另一个小问题(但与主要问题无关)如下:

代码语言:javascript
复制
pane.getChildren().add(btnText);
pane.getChildren().add(txtField);

这两行代码会产生以下错误:

代码语言:javascript
复制
add (javafx.scene.Node) in list cannot be applied to (java.awt.TextField)

在NetBeans中,两者都工作得很好,但是IntelliJ给出了问题。

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

在此之前,非常感谢您。

打招呼。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-16 15:58:07

在您的GUI类中,您有以下导入语句:import java.awt.*;*意味着您要导入java.awt包中的所有内容,其中包括:java.awt.TextFieldjava.awt.Button

这意味着,btnText不是一个javafx.scene.control.Button,而是一个java.awt.Button。AWT Button没有setOnAction方法,因此您将得到一个编译错误。这也影响到您的txtField,它现在是java.awt.TextField而不是javafx.scene.control.TextField

import java.awt.*替换为import javafx.scene.control.Buttonimport javafx.scene.control.TextField;或将其替换为import javafx.scene.control.*

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51365371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档