我似乎对IntelliJ有关setOnAction lambda函数有一个问题。经过大量的研究,我找不到我的问题的答案。
我正在学习用Java编程(最新的JDK 8版本),最近从NetBeans转到了IntelliJ IDE。我编写了一个非常简单的程序,代码在NetBeans中运行得很好,但是我在使用IntelliJ时遇到了问题。
setOnAction函数不被IntelliJ识别。我已经配置了IDE (Project /Modules/并选择了8-Lambda,类型注释,.)但没有成功。我手动添加:import javafx.event.ActionEvent;
我还配置了(设置/通用/自动导入/动态添加明确的导入)。
程序包含两个类,一个主类和一个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();
}
}桂班:
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。
在此之前,非常感谢您。
打招呼。
发布于 2018-07-16 15:58:07
在您的GUI类中,您有以下导入语句:import java.awt.*;。*意味着您要导入java.awt包中的所有内容,其中包括:java.awt.TextField和java.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.Button和import javafx.scene.control.TextField;或将其替换为import javafx.scene.control.*。
如果导入java.awt.*是故意的,将不同的GUI工具包混合在一起通常是个坏主意。
https://stackoverflow.com/questions/51365371
复制相似问题