gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:45:49 24 4
gpt4 key购买 nike

我似乎在 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。

提前非常感谢。

问候。

最佳答案

在您的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.Buttonimport javafx.scene.control.TextField将其替换为import javafx.scene.control.*

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

关于java - ActionEvent 库(JDK 8)无法识别 IntelliJ setOnAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com