Swing到Javafx转换
我不确定这是否是一个愚蠢的问题,但我需要帮助我创建的这个程序。我想为这个即时通讯应用程序创建一个登录屏幕,我已经创建了这个应用程序,但我是用javaFX创建的。问题是,由于这个即时通讯应用程序很旧,我用swing创建了它。因为swing中没有场景,javafx中也有,所以当我点击login时,我通常会改变场景,就这样。这就是为什么我要将这个程序从swing更改为javafx,但我遇到了一些错误,如果有人愿意告诉我我做错了什么,我将不胜感激。谢谢你,也很抱歉这么多余,记住我只是九年级的初学者 确切的误差在第56行Swing到Javafx转换,java,eclipse,swing,javafx,Java,Eclipse,Swing,Javafx,我不确定这是否是一个愚蠢的问题,但我需要帮助我创建的这个程序。我想为这个即时通讯应用程序创建一个登录屏幕,我已经创建了这个应用程序,但我是用javaFX创建的。问题是,由于这个即时通讯应用程序很旧,我用swing创建了它。因为swing中没有场景,javafx中也有,所以当我点击login时,我通常会改变场景,就这样。这就是为什么我要将这个程序从swing更改为javafx,但我遇到了一些错误,如果有人愿意告诉我我做错了什么,我将不胜感激。谢谢你,也很抱歉这么多余,记住我只是九年级的初学者 确切
The method ActionListener(new ActionListener(){}) is undefined for the type TextField
问题是您混合了swing和javafx。您正在导入以下两种内容:
import java.awt.event.*;
import javax.swing.*;
import javafx.application.Application;
...
import javafx.scene.Scene;
import javafx.scene.control.Button;
例如,在ClientFX构造函数中,您试图将javax.swing.JTextField(swing组件)添加到javafx.scene.BorderPane(javafx组件)中。JTextField不扩展javafx.scene.Node,因此不能将其提供给BorderPane.setTop(节点)
基本上,对于任何swing组件(通常以J、JTextField、JTextArea等开头),都可以找到javafx等价物(例如javafx.scene.control.TextField、javafx.scene.control.TextArea),并学习如何使用它们(它们将具有不同的api)。
最后,您不应该为java.awt或javax.swing使用import语句
更新
如前所述,您需要学习如何使用新的FXAPI。不仅包名、类和方法发生了变化,编程概念也可能发生了变化。
要移植JTextField行为,请使用TextField并使用EventHandler实现调用setOnAction方法(非常类似于swing概念):
userText.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(javafx.event.ActionEvent)
{
//
}
});
问题是您混合了swing和javafx。您正在导入以下两种内容:
import java.awt.event.*;
import javax.swing.*;
import javafx.application.Application;
...
import javafx.scene.Scene;
import javafx.scene.control.Button;
例如,在ClientFX构造函数中,您试图将javax.swing.JTextField(swing组件)添加到javafx.scene.BorderPane(javafx组件)中。JTextField不扩展javafx.scene.Node,因此不能将其提供给BorderPane.setTop(节点)
基本上,对于任何swing组件(通常以J、JTextField、JTextArea等开头),都可以找到javafx等价物(例如javafx.scene.control.TextField、javafx.scene.control.TextArea),并学习如何使用它们(它们将具有不同的api)。
最后,您不应该为java.awt或javax.swing使用import语句
更新
如前所述,您需要学习如何使用新的FXAPI。不仅包名、类和方法发生了变化,编程概念也可能发生了变化。
要移植JTextField行为,请使用TextField并使用EventHandler实现调用setOnAction方法(非常类似于swing概念):
userText.setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(javafx.event.ActionEvent)
{
//
}
});
如果您询问错误或异常,请始终在问题中附上完整的错误/异常信息,并指出涉及的代码行。这些信息非常重要,通常会准确地告诉你做错了什么,引导你找出解决方法。如果你没有这样做,这意味着你在这个网站上发布了一个问题,而没有先阅读如何做,这是你不想做的事,而不是如果你想在这里获得良好的接待和体面的回答。因此,请仔细阅读并查看该部分以及该部分,这样您的问题和答案将更好地改善您在此处的未来体验此问题没有错误,只需编辑它以包含您看到的错误。然后我们就可以提供帮助了。@Hovercraft Full Of Eels=对不起,我刚刚创建了我的帐户,我编辑了这个问题,希望能对您有所帮助me@nhouser9=错误现在包括在内,并提前感谢如果您询问错误或异常,请始终在问题中发布完整的错误/异常消息,并指出所涉及的代码行。这些信息非常重要,通常会准确地告诉你做错了什么,引导你找出解决方法。如果你没有这样做,这意味着你在这个网站上发布了一个问题,而没有先阅读如何做,这是你不想做的事,而不是如果你想在这里获得良好的接待和体面的回答。因此,请仔细阅读并查看该部分以及该部分,这样您的问题和答案将更好地改善您在此处的未来体验此问题没有错误,只需编辑它以包含您看到的错误。然后我们就可以提供帮助了。@Hovercraft Full Of Eels=对不起,我刚刚创建了我的帐户,我编辑了这个问题,希望能对您有所帮助me@nhouser9=错误现在包含在advanced中,感谢您=非常感谢,但是我刚刚编辑了代码,并得到了另一个错误我让它们一起工作(javaFX和swing)但是现在我犯了一个错误,你不应该试图让他们一起工作。例如,ActionListener也是一个awt/swing组件。摆脱swing并使用等效的javafx组件。这些技术在设计上是不兼容的,只是如果我去掉它们,调用命令中会出现更多错误。我更新了我的答案。但是,您应该尝试遵循我的建议,并学习如何使用新的api。搜索“javafx教程”或“如何使用javafx文本字段”,而不仅仅是删除swing组件。我的建议是用javafx equivalents=非常感谢,但是我刚刚编辑了代码并遇到了另一个错误我让它们一起工作(javafx和swing),但是现在我遇到了一个错误^你不应该让它们一起工作。例如,ActionListener也是一个awt/swing组件。摆脱swing,使用e
userText.setOnAction(new EventHandler<javafx.event.ActionEvent>()
{
@Override
public void handle(javafx.event.ActionEvent event)
{
//
}
});