我一直在使用JFrame来学习图形并测试我的代码,因为我知道它更好。现在我想更新到Javafx。我有这个JListener类来处理我的JFrame的所有按钮。是否可以在Javafx中使用此类?如果是这样的话?
例如,使用JFrame我可以使用Button.setActionCommand(" command");当按下按钮时它将使用actionListener运行它,我可以用javafx做同样的事情吗?
package src.com.Kingdom;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Scanner;
import java.net.*;
public class JListener implements ActionListener
{
private boolean registered = false;
registerClient register;
loginClient login;
static GUIs gui = new GUIs();
@Override
public void actionPerformed(ActionEvent e) {
switch(e.getActionCommand()) {
case("login"):
login = new loginClient(gui.getUsername(), gui.getPassword());
System.out.println("Login");
break;
case("exit"):
System.out.println("exit");
break;
case("register"):
System.out.println("register");
gui.getFrame().dispose();
gui.createRegisterGui();
break;
case("registerperson"):
if(gui.checkRegister()) {
if(hasInternet()) {
if(!(registered)) {
registered = true;
try {
register =
new registerClient(gui.getUsername(), gui.getPassword(), gui.getEmail(), gui.getAge());
} catch(Exception ex) {
GUIs.showError(ex.getMessage());
}
if(!(register.isRegistered())) {
gui.createLoginGui();
}
new Timer().schedule(new TimerTask() {
public void run() {
registered = false;
}
},1000*1);
}
} else {
GUIs.showError("No Internet! Please connect to internet to connect!");
}
} else {
GUIs.showError("Problem with registration format");
}
break;
}
}
}
答案 0 :(得分:3)
在技术上可以集成JavaFX和Swing。 Oracle provide a tutorial on this。除非你真的需要(在这种情况下你可能不这样做),我不建议将两者集成。请注意,可能的集成级别只是将Swing组件嵌入到JavaFX节点中(反之亦然)。您不能直接使用Swing侦听器在按下JavaFX按钮时执行操作。
相反,我建议您将代码本机编写到单个库中,JavaFX或Swing。
您的示例代码。用于处理按钮操作的JavaFX等效项是:
如何为action命令设置String?这可能吗?或者我必须采用不同的方式吗?
你不会,这没有必要。
我不编码Swing,所以我不熟悉Swing ActionEvent。通过查看代码,您的监听器似乎提供了一个单点来处理源自不同源的多个动作事件,然后对它们进行操作。
对于JavaFX,只需为每个源定义单独的事件处理程序而不是使用开关,然后您不需要将字符串传递给action命令,因为很清楚根据上下文采取什么操作。
例如:
loginButton.setOnAction(event -> { /** handle login **/});
exitButton.setOnAction(event -> { /** handle exit **/});
如果有多种方法可以触发操作,例如,菜单项和按钮都可以触发退出,那么您可以为操作处理程序定义一个变量,并为每个实例重用该变量,例如: / p>
EventHandler<ActionEvent> exitHandler = event -> { /** handle exit **/ };
exitButton.setOnAction(exitHandler);
exitMenuItem.setOnAction(exitHandler);